繁体   English   中英

C#FileSystemWatcher进程已在使用中

[英]C# FileSystemWatcher process already in use

我正在使用FileSystemWatcher来检测文件。 一旦检测到文件,我想读取内容并将其存储在字符串中。 但是当尝试读取内容时,我已经使用了进程。

这是我的代码:

var watcher = new FileSystemWatcher(b);
watcher.EnableRaisingEvents = true;
watcher.Path = Path.GetDirectoryName(b + "CMDExec.txt");
watcher.Filter = Path.GetFileName(b + "CMDExec.txt");
watcher.Created += Watcher_Created;

private void Watcher_Created(object sender, FileSystemEventArgs e)
{
    string b = Path.GetTempPath();
    string text = System.IO.File.ReadAllText(b + "CMDExec.txt");
}

您必须了解在这种情况下文件IO锁的工作方式。

让我们调用创建文件过程的过程A

进程A首先将创建文件并获得对该文件的排他锁以将内容写入其中

一旦发生这种情况,您将获得一个文件创建事件,以指示该文件已创建。 但是此时,进程A仍对文件保留独占锁定,因为它尚未完成内容写入。

如果您可以直接访问编写器进程,则可以向程序发出一些信号,以指示文件已完成并且可以使用。 否则,您将必须执行一些错误处理才能重试,直到可以成功读取文件为止。

但是请注意,您的读取将获得文件上的共享读取锁定,从而阻止任何其他过程在读取完成之前获取排他锁定。 因此,如果进程A尝试再次以独占方式锁定文件,它将失败并且如果处理不正确可能会崩溃。

欢迎来到并发和竞争条件的世界!

暂无
暂无

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

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