删除Filesystemwatcher引发的事件中的文件

时间:2011-11-17 13:34:11

标签: c# windows-services filesystemwatcher

我正在使用FileSystemWatcher监控文件夹并删除在该文件夹下创建的文件。但我的申请给我一个例外:

  

另一个应用程序正在使用该文件

ifsXmlFileWatcher.Path = "D:\\";
ifsXmlFileWatcher.IncludeSubdirectories = false;
ifsXmlFileWatcher.EnableRaisingEvents = true;
ifsXmlFileWatcher.Created += new FileSystemEventHandler(IfsFileUpload); 

private void IfsFileUpload(object sender, System.IO.FileSystemEventArgs e)
{
    try
    {            
        {               
            File.Delete(e.FullPath);
        }
    }
    catch (Exception exp)
    {
        MessageBox.Show(exp.Message);
    }
}

可能是什么问题?

2 个答案:

答案 0 :(得分:1)

我想这是一个时间问题。 FileSystemWatcher在创建文件时立即触发它的Created事件。这并不意味着所有内容都写入文件并再次关闭。所以它只是由创建它的进程访问,因为这个进程还没有写完它。

要删除它,你必须等到写完后。

答案 1 :(得分:0)

问题如您所知“文件正由另一个应用程序使用”。 因此,可能是您自己的应用程序使用它或您环境中的其他应用程序使用它。 可能的解决方案 您可以继续尝试删除它一定次数,我在这里尝试5次,然后在某处放弃/写事件或显示消息。我在这里发布了类似的答案,其中有人需要确保复制的文件是成功的How to know that File.Copy succeeded?

private void IfsFileUpload(object sender, System.IO.FileSystemEventArgs e)
{
  bool done = false;
  string file = e.FullPath;

  int i = 0;

  while (i < 5)
  {
    try
    {

      System.IO.File.Delete(file);
      i = 5;
      done = true;
    }
    catch (Exception exp)
    {
      System.Diagnostics.Trace.WriteLine("File trouble " + exp.Message);
      System.Threading.Thread.Sleep(1000);
      i++;
    }

  }
  if (!done)
    MessageBox.Show("Failed to delte file " + file);

}