kr8*_*r85 16 c# filesystems multithreading delete-file
删除文件后刷新文件列表时出现问题.当我命令删除文件时,抛出了异常,因为刷新方法试图访问应该删除的文件.
经过一番思考和调试后,我得出结论,问题在于系统需要一些时间来删除文件.我这样解决它:
//Deleting file
System.Threading.Thread.Sleep(2000);
//Refreshing list
Run Code Online (Sandbox Code Playgroud)
它工作得很好.
我的问题是
是否有更优雅的方式等待系统删除文件,然后继续代码...?
小智 14
这对我有用:
public static void DeleteFile(String fileToDelete)
{
var fi = new System.IO.FileInfo(fileToDelete);
if (fi.Exists)
{
fi.Delete();
fi.Refresh();
while (fi.Exists)
{ System.Threading.Thread.Sleep(100);
fi.Refresh();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我发现大多数时候,不会输入while循环.
我能想到的最优雅的方法是使用FileSystemWatcher并订阅它的Deleted
事件.
轻量级代码使用FileSystemWatcher,订阅其Deleted
事件并等待。
void DeleteFileAndWait(string filepath, int timeout = 30000)
{
using (var fw = new FileSystemWatcher(Path.GetDirectoryName(filepath), Path.GetFileName(filepath)))
using (var mre = new ManualResetEventSlim())
{
fw.EnableRaisingEvents = true;
fw.Deleted += (object sender, FileSystemEventArgs e) =>
{
mre.Set();
};
File.Delete(filepath);
mre.Wait(timeout);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11874 次 |
最近记录: |