可能重复:
如何找出使用.NET锁定文件的进程?
我想复制一个文件,但它被另一个应用程序锁定,因此抛出了FileInUseException.我想告诉用户哪个应用程序正在锁定我正在尝试复制的文件..NET Framework中有没有办法做到这一点?如果没有这方面的知识,我会告诉用户使用Unlocker应用程序.
您可以在此处尝试此问题中提供的代码,或者在此处查看其他建议。
一般方法是枚举所有进程的句柄,获取这些句柄的文件路径,然后与您感兴趣的文件进行比较。
但这种方法的一个问题是,即使您可以确定文件被锁定以及哪个应用程序具有文件锁定,那么您仍然必须应对竞争条件,例如......
一毫秒后
然后两毫秒后
然后三毫秒后
...ETC
一种建议是尝试在应用程序中获取文件句柄,并在无法获取时捕获异常。
try
{
using (Stream stream = new FileStream("MyFilename.txt"))
{
}
} catch {
//check here why it failed and ask user to retry if the file is in use.
}
Run Code Online (Sandbox Code Playgroud)
当然,这无助于识别罪魁祸首,但至少您有一种更安全的方法来尝试访问该文件。
| 归档时间: |
|
| 查看次数: |
2460 次 |
| 最近记录: |