C# 如何使用FileSystemWatcher检查文件是否被其他进程锁定?
可能重复:C# 如何使用FileSystemWatcher检查文件是否被其他进程锁定?,c#,.net,filesystemwatcher,C#,.net,Filesystemwatcher,可能重复: 在很多情况下,程序必须等到文件被另一个进程解锁(例如文件被复制)后才能再次使用。标准的解决方案是使用Thread.Sleep()等待它在循环中迭代。我认为那不是很好。我已经读到了使用.NET的FileSystemWatcher(我正在使用C#)可以实现这一点。有人能举例说明吗?非常感谢您的回复 顾名思义,您可以查看更改,创建,删除,重命名文件或文件夹时发生的任何事件 无法使用FileSystemWatcher检查文件是否已锁定 FileSystemWatcher _watcher;
在很多情况下,程序必须等到文件被另一个进程解锁(例如文件被复制)后才能再次使用。标准的解决方案是使用Thread.Sleep()等待它在循环中迭代。我认为那不是很好。我已经读到了使用.NET的FileSystemWatcher(我正在使用C#)可以实现这一点。有人能举例说明吗?非常感谢您的回复 顾名思义,您可以查看
更改,创建,删除,重命名文件或文件夹时发生的任何事件
无法使用FileSystemWatcher
检查文件是否已锁定
FileSystemWatcher _watcher;
int _watcherEventFiredCounter;
_watcher = new FileSystemWatcher {
Path = @"C:\temp",
NotifyFilter = NotifyFilters.LastWrite,
Filter = "*.zip",
EnableRaisingEvents = true
};
_watcher.Changed += OnChanged;
private void OnChanged(object sender, FileSystemEventArgs e)
{
_watcherEventFiredCounter++;
// The event is fired two times: on start copying and on finish copying
if (_watcherEventFiredCounter == 2) {
Console.WriteLine("Copying is finished now!");
_watcherEventCounter = 0;
}
}
现在的问题是如何返回到调用线程?否。FileSystemWatcher不会告诉您何时释放文件句柄。但如果创建了文件,它会触发一个sertain事件。这难道不能解决我的问题吗?正在解锁的文件与正在创建的文件不同。在一般情况下,即使您可以找到一种方法来通知文件已解锁,但当您的代码正在运行并尝试获取该文件时,也可能有其他进程已使用新锁。您必须编写代码,以便在尝试获取被锁定的文件时对其作出反应。如果另一个进程在程序运行时获得了新的锁,则可以避免对事件注销的干扰:code
watcher.EnableRaisingEvents=false<代码>代码
您可以看一下我对原始问题的答案,您的答案与以下内容重复: