删除由Filesystemwatcher引发的事件中的文件
问题描述:
我正在使用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);
}
}
可能是什么问题?
答
问题所在您还知道“文件正被另一个应用程序使用”。 因此,它可能是您自己的应用程序在您的使用环境中使用它或其他应用程序。 可能的解决方案可能是 您可以继续尝试删除一定次数,我在这里尝试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);
}
答
我想这是一个计时问题。 FileSystemWatcher在创建文件时立即触发它的创建事件。这并不意味着所有的内容都会被写入文件,并且会再次关闭。所以它只是由创建它的进程访问,因为该进程尚未完成写入。
要删除它,您必须等到写入完成。
的问题是,它得到了一些程序创建的文件仍在使用该程序,并上有排它锁。 –