我怎么知道文件在asp.net中使用与否

时间:2011-02-10 09:20:09

标签: asp.net vb.net

我使用运行状况监控创建了一个文件清理功能。它正在删除无法从另一个进程访问的文件。所以,我想检查一下。它是否可以访问。如果不访问,我删除此文件。我该怎么办?

1 个答案:

答案 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