2

我需要从文件处于锁定状态的错误情况中恢复。我如何在 c# 中告诉这个文件重置它的锁?我需要添加到这个文件是由第 3 方 dll 打开的,我实际上无权访问文件句柄。

4

4 回答 4

5

锁定文件是操作系统(代表打开它的程序)的责任。如果文件处于锁定状态,则完全取决于操作系统来解锁。这通常在打开文件的进程退出时自动发生。

但是,我遇到了一个非常酷的实用程序,它会有所帮助。它被称为解锁器

于 2008-10-23T02:24:52.943 回答
1

我真的会考虑寻找另一个 3rd 方 dll。任何处理 Streams 的系统都应该正确响应错误条件,而不是保留文件锁定之类的东西。

该库是否有可能提供错误条件清理,您刚刚看过它?尝试类似以下的方法,

 try {
   thirdPartyObj = new ThirdPartObj();
   // Some possible error causing object actions
 catch(Exception ex) {
   thirdPartyObj = null; // The object should close its resources
 }
于 2008-10-23T02:32:47.170 回答
1

您也许可以使用以下内容启动命令行进程,例如 net 或 psfile:

System.Diagnostics.Process.Start("psfile c:\myfile.txt -c");

您可以在此处获取 psfile 。

你也可以使用

net file ID /close

但这需要您知道文件 ID,这需要更多的工作。

未经测试,但这应该给你一个起点。

于 2008-10-23T02:53:22.823 回答
0

您必须使用 .Close() 关闭文件。您需要确保您仍然可以访问文件对象。

您通常可以通过在执行文件 I/O 的代码之后编写 try{} ... finally {} 构造来避免此错误。在 finally {} 块中,您将调用文件对象的 Close 方法,以防止出现这种情况。您还可以在创建文件时使用 using {} 块,这也可以解决此问题。

于 2008-10-23T02:10:32.877 回答