文件系统监视器锁定文件夹。

7
我有一个监听文件夹的FileSystemWatcher。当我尝试重命名该文件夹(在Windows资源管理器中),会出现以下错误信息:

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;

我可以重命名该文件夹中的文件。还有兄弟文件。我甚至尝试在fsw_Deleted的第一行放置一个return;。仍然没有起作用。关闭Visual Studio,删除obj和bin并重新运行也无效。我甚至尝试在VS外部运行exe文件。如果不运行,则没有锁定,如果运行,则被锁定。


不,FileSystemWatcher不会锁定(例如:C# FileSystemWatcher lock folder)。你的fsw_Deleted中可能有某些东西锁定了目录或其中的文件。 - CodeCaster
@CodeCaster,我甚至尝试在fsw_Deleted的第一行放置return;。 仍然没有起作用。 关闭Visual Studio并删除objbin也无济于事。 我不知道还能尝试什么。 欢迎任何想法。 - ispiro
@CodeCaster 抱歉,我的意思是这样做,_然后_再次运行。我甚至尝试在VS之外运行exe文件。仍然-如果它没有运行,则无法锁定,如果运行则已锁定。 - ispiro
但是我们无法知道其他代码正在运行,因为您没有展示它。正如您已经注意到的那样,您展示的代码并没有引起您所描述的问题。恐怕在您的问题中没有足够的信息来分析这个问题。 - CodeCaster
@CodeCaster,没有其他正在运行的程序在执行此操作,因为当我关闭此程序时,我可以重命名它。至于您的最后一条评论-是的,我绝对理解这很少有助于解决问题。这就是为什么我的问题被表述为这样 - 我正在寻找有类似经验的人,并会说-是的,它是XYZ。不过还是谢谢你的帮助,我很感激。 - ispiro
@CodeCaster 我找到了答案 - 请看我的回答。再次感谢。 - ispiro
2个回答

8
我已经发现了引起此问题的原因。第二个FileSystemWatcher位于第一个FileSystemWatcher的子目录中,并且不允许对第一个FileSystemWatcher进行重命名。
(但我仍然感到惊讶。一个FileSystemWatcher应该是“隐形”的。)

0

这样做是因为你的进程正在查找该文件夹中的文件。你可能想要做的是为fsw.Rename添加一个处理程序。然后在该过程内部,你应该对查找新文件进行RemoveHandler操作,然后使用文件夹的新名称重新添加它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接