Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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# 断断续续;“正在使用的文件”;错误_C#_Asp.net_Exception_File Io_Exception Handling - Fatal编程技术网

C# 断断续续;“正在使用的文件”;错误

C# 断断续续;“正在使用的文件”;错误,c#,asp.net,exception,file-io,exception-handling,C#,Asp.net,Exception,File Io,Exception Handling,我有一些代码,我写的基本上清除目录,每次程序运行通过这一点。我不想费心去列举文件。如果这样做不好,请告诉我 然而,我的主要问题是如何处理以下问题:文件夹中的一个文件似乎正在使用,而实际上肯定没有。该程序在ButtonClick事件上运行,它在前四五次爆炸,但在我确认服务器上没有人使用该文件后,它就工作了。除了我之外,只有一个人会使用它,他确认他这边没有任何东西会碰到这个文件。有没有关于什么会导致这个错误/如何避免它/如何处理它的想法 我在复制错误时也遇到了问题 string directory

我有一些代码,我写的基本上清除目录,每次程序运行通过这一点。我不想费心去列举文件。如果这样做不好,请告诉我

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

我在复制错误时也遇到了问题

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

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

    Directory.CreateDirectory(directory);

如果文件正在使用中,那么肯定有人在使用它。:)


如果您可以访问文件所在的服务器,则可以使用诸如之类的工具查找哪个进程打开了文件。

如果您使用的是Windows XP,这可能会有帮助:

仅此页顶部的摘录: 如果您运行的是Windows XP或更早版本,如果某个枚举目录或文件上仍有打开的句柄,则枚举后的文件或目录上的删除操作可能会失败


您也可以使用类似的软件来识别锁定文件的进程。

我认为您必须删除底层文件可能有人正在使用该文件,但没有处理该文件流。一旦GC收集到文件流,文件就可以使用。在这里,防病毒可能是一个难题,尽管很难说,因为上面的示例没有涉及任何文件…@Marc gravel该示例涉及目录中的任何和所有文件
Delete(true)
将删除目录中由
DirectoryInfo
引用的子目录和文件。这与问题无关,但要注意竞争条件。该线程或应用程序几乎可以在该代码段中的任何位置被抢占,如果抢占线程也处理有问题的目录,则可能引发异常。此外,可能在不同主机上同时运行上述代码的多个实例之间也存在并发性问题。可能使用它的过程没有启动,因为这部分失败了,除了我之外,只有一个人会这样。我和他核实了一下,他确认他既没有开始下一个过程,也没有接触文件。这也不能解释为什么这会是间歇性的。@SeanVDH同样,如果Windows报告该文件正在使用,那么它正在使用。通过Process Explorer检查谁在使用它,并从那里处理问题。在这种情况下会更好——允许记录所有访问。在Process Explorer中可能很难看到临时访问。我知道这需要一些时间,但这最终成为问题的根源。谢谢