繁体   English   中英

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

[英]Deleting file in event raised by 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);
    }
}

可能是什么问题?

我想这是一个时间问题。 创建文件后,FileSystemWatcher立即触发它的Created事件。 这并不意味着所有内容都已写入文件,并且再次将其关闭。 因此,创建它的进程只能访问它,因为该进程尚未完成对其的写入。

要删除它,您必须等到写入完成。

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

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

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM