我想删除一些文件,但仅限于它们未被使用。我做的是尝试/捕获:
Try
My.Computer.FileSystem.DeleteFile(fileInfo.FullName)
Catch ex As Exception
End Try
但是如果我尝试通过网络删除一些文件,这个方法似乎很慢。
是否有更快的方法来删除文件?如果文件打开,首先检查是否更快?如果是,我如何检查文件是否打开?
亲切的问候 尼科
答案 0 :(得分:3)
提示:如果要删除目录,则应使用Directory.Delete(String, Boolean)。
如果您使用FileInfo,请致电FileInfo.Delete()它可能会更快或更快。您的问题似乎出现在您的网络中......
答案 1 :(得分:2)
答案 2 :(得分:1)
如果问题是网络连接速度慢,那么您可以做的就是获得更快的网络。问题是否只发生在网络上?
如果可能,请尝试在托管文件的计算机上运行代码,这样您就无需通过网络。
答案 3 :(得分:1)
这个想法的一个基本问题当然是它本身就是一种竞争条件。正在使用的文件| now |可能没有使用| now |,反之亦然。出于性能原因,它仍然可以带来好处。但是,我确实怀疑你试图删除多个文件,尽管你的coude只删除了一个文件。使用线程池可能是有意义的,因为您可以并行尝试多个删除。
[编辑]
我还注意到您使用My.Computer.FileSystem.DeleteFile(String)
。这有一个小问题;它需要再次按名称查找文件。这不是网络上最便宜的操作。 SHFileOperation
可能更有效,但它是一个复杂的原生API函数。
答案 4 :(得分:1)
您可能最好使用名为IOException的更具体的异常。至于从网络中删除文件,结果显然会有延迟,请记住网络上的文件会被其他人打开。您可以检查fileinfo类的LastAccessTime / LastAccessWrite属性以查看它是否是最新的,然后您就会知道它正在使用中。
希望这有帮助, 最好的祝福, 汤姆。