[英]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.