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

本文关键字:删除 文件 事件 Filesystemwatcher | 更新日期: 2023-09-27 18:15:04

我正在使用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);
    }
}

可能是什么问题?

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

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

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

问题如你所知"文件正在被另一个应用程序使用"。因此,可能是您自己的应用程序在使用它,也可能是您环境中的其他应用程序在使用它。可能的解决方案为你可以继续尝试删除它的某些次数,我在这里尝试5次,然后放弃/写事件某处或显示消息。我在这里张贴了类似的答案,有人需要确保文件复制成功,如何知道该文件。复制成功了吗?

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);
}