强制关闭C#打开的文件

我在这里发现了一个类似的问题,但它已被关闭/接受并回答“不要那样做”。

我处在这样一种情况,我不关心其他应用程序发生了什么,我想要一个可能被其他人锁定的文件(如果需要可以粗鲁地),并且我可以使用它。 我可能需要移动,重命名或删除此文件。

基本上我需要处理由不清理它的锁的应用程序创建的目录中的文件。 我知道应用程序在我的调用时已完成处理,但我需要在运行时终止锁定。 此外,我似乎与扫描服务器所在远程共享的本地AV软件的读取冲突。

所有这些加起来是一个无法解决的“强制关闭”的情况,所以我可以做我需要的。 有谁知道该怎么办?

首先,您可以使用此post来validation它是锁定它们的狡猾的应用程序:

如何找出使用.NET锁定文件的进程?

然后这篇文章概述了一种关闭它们的方法:

http://social.msdn.microsoft.com/Forums/en-US/csharplanguage/thread/04a1e899-2a38-4d95-8ed5-6d53344e4d76

这可能是无关紧要的,如果它是请某人评论,但有一个解决方案,我之前在探险家用于解决文件锁。
如果某个文件被一个已经死亡的进程锁定,Windows通常不允许您删除它,但如果您在其他地方创建了一个同名的新文件,则将其移动到它将成功的文件夹中。 然后你可以删除新文件,一切都很顺利。
要将它用于您的应用程序,您必须能够在执行此操作之前读取文件并将其保存在内存中,然后在删除旧文件后将其写回。
也许它会有所帮助,也许不会,但值得尝试。

foreach (var process in Process.GetProcessesByName("excel")) //whatever you need to close { if (process.MainWindowTitle.Contains("test.xlsx")) { process.Kill(); break; } } 

要么

  foreach (var process in Process.GetProcesses()) { if (process.MainWindowTitle.Contains("test.dat")) { process.Kill(); break; } }