快速删除文件的方法

时间:2009-11-23 13:26:13

标签: c# vb.net

我想删除一些文件,但仅限于它们未被使用。我做的是尝试/捕获:

    Try
        My.Computer.FileSystem.DeleteFile(fileInfo.FullName)
    Catch ex As Exception

    End Try

但是如果我尝试通过网络删除一些文件,这个方法似乎很慢。

是否有更快的方法来删除文件?如果文件打开,首先检查是否更快?如果是,我如何检查文件是否打开?

亲切的问候 尼科

5 个答案:

答案 0 :(得分:3)

提示:如果要删除目录,则应使用Directory.Delete(String, Boolean)

如果您使用FileInfo,请致电FileInfo.Delete()它可能会更快或更快。您的问题似乎出现在您的网络中......

答案 1 :(得分:2)

不要忘记检查文件是否正在使用中。

http://msdn.microsoft.com/en-us/library/system.io.stream.canwrite.aspx

答案 2 :(得分:1)

如果问题是网络连接速度慢,那么您可以做的就是获得更快的网络。问题是否只发生在网络上?

如果可能,请尝试在托管文件的计算机上运行代码,这样您就无需通过网络。

答案 3 :(得分:1)

这个想法的一个基本问题当然是它本身就是一种竞争条件。正在使用的文件| now |可能没有使用| now |,反之亦然。出于性能原因,它仍然可以带来好处。但是,我确实怀疑你试图删除多个文件,尽管你的coude只删除了一个文件。使用线程池可能是有意义的,因为您可以并行尝试多个删除。

[编辑]

我还注意到您使用My.Computer.FileSystem.DeleteFile(String)。这有一个小问题;它需要再次按名称查找文件。这不是网络上最便宜的操作。 SHFileOperation可能更有效,但它是一个复杂的原生API函数。

答案 4 :(得分:1)

您可能最好使用名为IOException的更具体的异常。至于从网络中删除文件,结果显然会有延迟,请记住网络上的文件会被其他人打开。您可以检查fileinfo类的LastAccessTime / LastAccessWrite属性以查看它是否是最新的,然后您就会知道它正在使用中。

希望这有帮助, 最好的祝福, 汤姆。