FileSystemWatcher 锁定文件夹
FileSystemWatcher locks folder
我有一个 FileSystemWatcher
正在监听一个文件夹。当我尝试重命名此文件夹时(在 Windows Explorer 中)我得到
The action can't be completed because the folder or a file in it is
open in another program
错误。
注释掉 FileSystemWatcher
调用可以解决此问题。
我试过用一个简单的程序重现错误,但没有成功,所以我不确定这里发生了什么。有没有人用 FileSystemWatcher
遇到过这样的事情?如果是这样 - 可能是什么原因造成的?
更多信息:
以下似乎足以导致错误:
FileSystemWatcher fsw = new FileSystemWatcher(path);
fsw.Deleted += new FileSystemEventHandler(fsw_Deleted);
fsw.EnableRaisingEvents = true;
我可以重命名该文件夹中的文件。和兄弟文件。我什至尝试将 return;
作为 fsw_Deleted
中的第一行。仍然没有用。由于没有关闭 Visual Studio,并删除了 obj 和 bin,并且再次 运行。我什至尝试 运行 不在 VS 中的 exe 文件。仍然 - 如果不是 运行,则不锁定,如果是,则锁定。
它将执行此操作,因为您的进程正在该文件夹中查找文件。您可能想要做的是为 fsw.Rename 添加一个处理程序。然后在该过程中,您应该在查找新文件时执行 RemoveHandler,然后使用文件夹的新名称将其添加回去。
我发现了造成这种情况的原因。还有第二个 FileSystemWatcher
- 在第一个的子目录中 - 不允许重命名第一个。
(不过我还是很惊讶,一个FileSystemWatcher
应该是"invisible"。)
我有一个 FileSystemWatcher
正在监听一个文件夹。当我尝试重命名此文件夹时(在 Windows Explorer 中)我得到
The action can't be completed because the folder or a file in it is open in another program
错误。
注释掉 FileSystemWatcher
调用可以解决此问题。
我试过用一个简单的程序重现错误,但没有成功,所以我不确定这里发生了什么。有没有人用 FileSystemWatcher
遇到过这样的事情?如果是这样 - 可能是什么原因造成的?
更多信息:
以下似乎足以导致错误:
FileSystemWatcher fsw = new FileSystemWatcher(path);
fsw.Deleted += new FileSystemEventHandler(fsw_Deleted);
fsw.EnableRaisingEvents = true;
我可以重命名该文件夹中的文件。和兄弟文件。我什至尝试将 return;
作为 fsw_Deleted
中的第一行。仍然没有用。由于没有关闭 Visual Studio,并删除了 obj 和 bin,并且再次 运行。我什至尝试 运行 不在 VS 中的 exe 文件。仍然 - 如果不是 运行,则不锁定,如果是,则锁定。
它将执行此操作,因为您的进程正在该文件夹中查找文件。您可能想要做的是为 fsw.Rename 添加一个处理程序。然后在该过程中,您应该在查找新文件时执行 RemoveHandler,然后使用文件夹的新名称将其添加回去。
我发现了造成这种情况的原因。还有第二个 FileSystemWatcher
- 在第一个的子目录中 - 不允许重命名第一个。
(不过我还是很惊讶,一个FileSystemWatcher
应该是"invisible"。)