如何在C#中强制删除锁定的文件

时间:2014-08-21 06:17:03

标签: c# locked-files

我有一个场景,我必须删除文件。我不知道也不关心谁拥有该文件。我必须删除它,他们可以粉碎我所关心的一切。 (我不想杀死锁定任务)

我想到的唯一解决方案是使用http://www.emptyloop.com/unlocker/命令行界面。

MoveFileEx 不是选项,因为我无法重启机器。

还有更多的C#ish方法/库吗?

我对使用控制台应用程序API感到兴奋

如果不清楚的话。我知道所涉及的风险,我不需要讲一讲为什么这是一个不好的做法。如果你知道怎样做我问的话。非常感谢你!

如果你想讲述为什么这很糟糕 - 只是不要找别人打扰##

2 个答案:

答案 0 :(得分:1)

我不能给你一个解决方案,但可以指出你的方向。

Window Process Explorer有一个可以让你搜索句柄的函数: enter image description here

当您选择该句柄时,您将转到拥有该句柄的进程,您可以右键单击它并关闭句柄并释放该进程对该文件的锁定。

所以基本上你需要找出Process explorer正在使用哪些API调用并在你的应用程序中自己执行它们。

答案 1 :(得分:0)

我认为由于锁的性质,你所要求的是不可能的 如果另一个程序可以抓取您的文件并在您阅读数据时擦除它们,您会有什么感受?

我相信这些解锁器会检测到这个过程并试图强制它以这种或那种方式释放它的锁(甚至可能关闭它们的过程)。
虽然这可能适用于大多数应用程序,但有些会更具侵略性(例如,想想病毒扫描程序)。

所以也许你需要问问自己是否想要增加获得锁定的机会,或者你是否需要绝对确保获得锁定。

编辑:
假设您可以终止更衣室进程并且您确实想要清除这些文件(无论后果如何),您可以找到持有锁并将其关闭的进程。 在this thread中,他们提供了一些解决方案,用于通过句柄,win32 dll或甚至计划.NET代码来跟踪哪个进程持有锁(在c#代码中)。

免责声明请注意,关闭此类流程会对该计划的一致性造成严重影响,您甚至可能会做得更糟糕(假设它正在将数据库的状态写为例如,并且终止它的中途)