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

C# 如何强制删除C中锁定的文件#,c#,locked-files,C#,Locked Files,我有一个场景,我必须删除一个文件。我不知道也不在乎谁持有文件。我必须删除它,他们可以粉碎所有我关心的。(我不想终止锁定任务) 我想到的唯一解决方案是使用命令行界面 MoveFileEx不可用,选项,因为我无法重新启动机器 是否还有其他C#ish方法/库用于此 我不喜欢使用控制台应用程序API 如果不清楚的话,我知道其中的风险,我不需要一个讲座来解释为什么这是一个糟糕的做法。如果你知道怎么做我的要求。非常感谢你! 如果你想讲讲为什么这不好——只是不要找其他人麻烦##我认为你所要求的是不可能的,因为

我有一个场景,我必须删除一个文件。我不知道也不在乎谁持有文件。我必须删除它,他们可以粉碎所有我关心的。(我不想终止锁定任务)

我想到的唯一解决方案是使用命令行界面

MoveFileEx
不可用,选项,因为我无法重新启动机器

是否还有其他C#ish方法/库用于此

我不喜欢使用控制台应用程序API

如果不清楚的话,我知道其中的风险,我不需要一个讲座来解释为什么这是一个糟糕的做法。如果你知道怎么做我的要求。非常感谢你!
如果你想讲讲为什么这不好——只是不要找其他人麻烦##

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

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

因此,也许你需要问问自己,你是想增加获得锁的机会,还是需要绝对确保获得锁。

编辑:
假设您可以终止locker进程,并且确实希望清除这些文件(不管后果如何),那么您可以找到持有锁的进程并将其关闭。 在本文中,他们给出了一些通过句柄、win32 dll甚至plan.NET代码跟踪哪个进程持有锁(在c代码中)的解决方案。


免责声明
请注意,关闭这样一个进程将对该程序的一致性产生可怕的影响,您甚至可能做得更糟而不是更好(例如,假设它正在将其状态写入数据库,中途终止)

我无法给您提供解决方案,但可以为您指明方向

窗口有一个函数,可以让您搜索句柄:

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


因此,基本上您需要找出Process explorer正在使用的API调用,并在应用程序中自己执行它们。

因此,您正在寻找其他程序的
中断编程保证,因为绝对正确()
?我不认为这已经在C#中实现了。不太可能。如果另一个程序在一个文件上有一个打开的句柄,而你删除了它,它不会影响正在使用它的程序吗?如果在你输入这个问题时某个程序删除了你的浏览器可执行文件呢?我不确定是否真的知道这种“坏习惯”的严重性。这相当于释放bug后使用,这是内存损坏的一种形式。如果在目标应用程序绑定访问句柄时重用了该句柄,那么它现在将访问另一个对象,这可能导致文件损坏和安全漏洞。也就是说,下面的博文有一个合理的解决方案:@CodesInChaos将此作为一个答案发布,这样我就可以给你评分了。我的软件在服务器上单独运行。可能访问这些文件的任何其他程序。也是我写的。我需要处理由于泄漏而锁定和未发布的文件的情况。包括操作系统?当然不是。但是为什么****会锁定我的文件。@NahumLitvin-你考虑过改为修复这个错误吗?@Damien_不相信这个错误被修复了。但未来类似的问题将在几分钟内填满服务器的硬盘。