2011-03-18 65 views
0

我有一些代码,我每次程序通过此点运行时写给基本明确了该目录。我不想打扰枚举文件。如果这是一个不好的方法,请告诉我。间歇性“文件正在使用”错误

我的主要问题,然而,是关于如何处理以下内容:文件夹中的文件之一似乎是在使用的时候它肯定不是。该程序在ButtonClick事件上运行,它在前四五次爆炸,但在确认没有人在服务器上使用该文件后,该程序运行。除了我自己以外,只有一个人会使用它,并且他确认他身边没有任何东西会碰到文件。任何想法会导致这个错误/如何避免它/如何处理它?

我也有麻烦重现错误...

string directory = @"\\server\directory\folder\"; 
    DirectoryInfo di = new DirectoryInfo(directory); 

    if (di.Exists) 
     di.Delete(true); 

    Directory.CreateDirectory(directory); 
+0

我认为你必须删除 – Robert 2011-03-18 12:28:24

+1

可能有人在使用文件,并没有处置的FileStream基础文件。然后,一旦GC收集FileStream,文件就变得可用。 – CodesInChaos 2011-03-18 12:28:32

+1

杀毒软件可以是一个痛苦这里,虽然很难说,因为样品上面并没有触及任何文件... – 2011-03-18 12:33:32

回答

1

如果您使用的是Windows XP,这可能会帮助:http://msdn.microsoft.com/en-us/library/dd997370.aspx#remove_open_handles

只是一个提取此网页的顶部: “如果你运行的是Windows XP或更早版本,对文件或目录的删除操作是如果枚举的目录或文件中有一个打开的句柄仍然存在,枚举可能会失败。“

你也可以使用一个软件像Unlocker识别过程中锁定您的文件。

+0

我知道这需要一些时间,但最终成为问题的根源。谢谢。 – SeanVDH 2011-03-30 16:24:18

1

如果该文件正在使用,这时有人肯定是使用它。 :)

如果您可以访问这些文件驻留在服务器上,你可以使用一个工具,如Process Explorer找出哪个进程打开的文件。

+0

除了没有人。可能一直使用它的过程并没有开始,因为这部分失败了,在我自己身边只有一个人会这样做。我与他核对,他证实他既没有开始下一个过程,也没有触及文件。这也不能解释为什么这是间歇性的。 – SeanVDH 2011-03-18 12:31:16

+0

@SeanVDH再次,如果Windows报告该文件正在使用中,那么它正在使用中。通过Process Explorer检查谁在使用它,并从那里处理问题。 – 2011-03-18 12:33:01

+0

[Process Monitor](http://technet.microsoft.com/en-gb/sysinternals/bb896645)在这种情况下会更好 - 允许记录所有访问。也许很难在Process Explorer中看到瞬态访问。 – Richard 2011-03-18 12:41:09