2008-10-23 76 views
2

我需要恢复形式的文件进入锁定状态的错误情况。我如何在C#中告诉这个文件重置它的锁?我需要添加到此文件是由第三方DLL打开,我实际上没有访问文件句柄。删除文件锁

回答

1

也许你可以这样开始网或psfile中一个命令行程序沿着线的东西:

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

你可以得到psfile中here

你也可以使用

net file ID /close

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

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

0

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

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

+0

这将工作,如果我不是在第三方DLL中打开该文件。 – Erin 2008-10-23 02:21:03

5

锁定文件是操作系统的责任(代表打开它的程序)。如果一个文件处于锁定状态,那么它真正取决于要解锁的操作系统。这通常会在打开文件的进程退出时自动发生。

然而,有一个非常酷的实用程序,我遇到,这将有所帮助。它被称为Unlocker

1

我真的会考虑找到另一个第三方DLL。任何处理Streams的系统都应该正确地响应错误情况,并且不要留下文件锁定之类的东西。

有没有可能库提供了错误条件清理,你刚看过吗?试着像下面这样,

try { 
    thirdPartyObj = new ThirdPartObj(); 
    // Some possible error causing object actions 
catch(Exception ex) { 
    thirdPartyObj = null; // The object should close its resources 
} 
+0

该进程挂起并吃掉了cpu的50%。在其他情况下,它将返回一个错误代码。这是一个C++ dll中的静态函数。 – Erin 2008-10-23 13:27:12