如何检查任何其他进程是否正在访问某个文件并将其释放?

Rav*_*sha 1 c#

我试图删除/打开/编辑我的C#.Net应用程序中的一些文件.有时我得到异常,说明文件/目录正被另一个进程访问.有没有办法检查文件/目录是否被进程访问并尝试从该进程中释放文件?

ito*_*son 6

否.执行此操作的唯一方法是尝试访问该文件,并处理IOException.

实际上,这是唯一安全的方式.假设有一个IsFileInUse()方法,并且你调用它,它返回"nope,没有人使用该文件",然后你继续访问该文件.问题是,与此同时,其他一些进程可能已锁定或删除该文件.因此,无论如何,您都需要对尝试访问文件进行异常处理."通过获取测试"模型是唯一100%可靠的模型.

如果另一个进程正在使用某个文件,则.NET不提供确定可能的其他进程的方法.我相信这需要一些非常低级的非托管代码,尽管我可能是错的.如果可能的话,这是一个非常低级别的操作,"从该进程中释放文件",因为这会违反其他进程的期望 - 例如,它认为允许写入文件但是你有删除文件并使用手柄.如果不愿意自愿放弃锁定,我相信你需要终止其他程序.