Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.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#_Filesystemwatcher_System.io.file - Fatal编程技术网

C#FileSystemWatcher进程已在使用中

C#FileSystemWatcher进程已在使用中,c#,filesystemwatcher,system.io.file,C#,Filesystemwatcher,System.io.file,我正在使用FileSystemWatcher检测文件。一旦它检测到文件,我想读取内容并将其存储在字符串中。但当我试图阅读的内容,我得到的过程已经在使用中 这是我的密码: var watcher = new FileSystemWatcher(b); watcher.EnableRaisingEvents = true; watcher.Path = Path.GetDirectoryName(b + "CMDExec.txt"); watcher.Filter = Path.GetFileNam

我正在使用
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仍然持有文件的独占锁,因为它尚未完成内容的写入

如果您可以直接访问writer进程,则可以向程序发出一些信号,指示文件已完成并准备好使用。或者,在成功读取文件之前,您必须进行一些错误处理,然后重试

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


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

在这种情况下,您必须了解文件IO锁是如何工作的

让我们将创建文件的进程称为进程

进程A将首先创建文件并获取文件的独占锁,以将内容写入其中

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

如果您可以直接访问writer进程,则可以向程序发出一些信号,指示文件已完成并准备好使用。或者,在成功读取文件之前,您必须进行一些错误处理,然后重试

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


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

有时候我会问我这辈子在干什么哈哈,谢谢你的帮助,我会调查的。延迟会起作用吗?@Best剥削它会有帮助,但不是保证。如果原始进程在读取结束前再次尝试访问该文件,则可能会遇到问题。所以这里没有明确的答案,所有的情景都是基于你在做什么和A在做什么。好吧,它是有效的!谢谢你所做的一切,祝你有一个美好的白天/夜晚。有时我会问我的生活在做什么哈哈,谢谢你的帮助我会调查的。延迟会起作用吗?@Best剥削它会有帮助,但不是保证。如果原始进程在读取结束前再次尝试访问该文件,则可能会遇到问题。所以这里没有明确的答案,所有的情景都是基于你在做什么和A在做什么。好吧,它是有效的!谢谢你所做的一切,祝你有一个愉快的白天/夜晚。史蒂夫的回答很中肯,所以我不会提供更多的细节。然而,我认为将你引向最容易解决你的问题的思考过程是很有用的:这是一个很好的起点。史蒂夫的回答很中肯,所以我不会提供更多的细节。然而,我认为将你引向最容易解决你的问题的思考过程是很有用的:一个好的起点。