Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用FileSystemWatcher检查文件是否被其他进程锁定?_C#_.net_Filesystemwatcher - Fatal编程技术网

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<代码>代码
您可以看一下我对原始问题的答案,您的答案与以下内容重复: