我使用运行状况监控创建了一个文件清理功能。它正在删除无法从另一个进程访问的文件。所以,我想检查一下。它是否可以访问。如果不访问,我删除此文件。我该怎么办?
答案 0 :(得分:2)
您可以做的一件事,而不是尝试检查文件是否被锁定(因为这可能会在检查和尝试删除之间的时间内发生变化)将删除尝试包装在try
/ { {1}}阻止:
catch
请注意,我没有抓住通用Exception
,而是抓住了IOException
。这是因为Dim filenameToDelete = "AFileThatsInuse.doc"
Try
System.IO.File.Delete(filenameToDelete)
Catch ex As IOException
' Have some code here that logs the content of the exception to a log file,
'the Windows Event Log or sends an email - whatever is appropriate
End Try
的{{3}}表示您在以下情况下会收到此异常:
指定的文件正在使用中。
-OR -
文件上有一个打开的句柄, 操作系统是Windows XP 或更早。这个打开手柄可以 枚举目录的结果 和文件。有关更多信息,请参阅 如何:枚举目录和 文件。
你可能仍然想要捕获/处理其他异常类型,但是“盲目地”捕获和处理异常并不是一个好主意,而不是其中一个更具体的变体。
您还可以尝试documentation编写,如果失败,那么您可以告诉该文件已在其他位置打开:
File.Delete
此代码尝试以独占方式打开文件,因此如果另一个进程已经打开该文件,它将失败并为您抛出Try
System.IO.File.Open("AFileThatsInUse.doc", FileMode.Open, FileAccess.Read, FileShare.None)
Catch ex as IOException
' As before, what you do when you determine the file is in use is up to you
End Try
。