我想关闭一个文件

时间:2010-02-11 12:48:15

标签: c# .net

我有一个文件,我想以编程方式关闭该文件,这是另一个进程使用的。

问题是我想从另一个进程中释放文件,无论哪个使用它然后删除它..无论如何以编程方式执行此操作? 我正在使用c#..

如何删除这个?

我已经完成了像

这样的代码

if(File.Exists(filePath))   File.Delete(文件路径);

删除文件

5 个答案:

答案 0 :(得分:4)

这取决于过程。您没有必要使用该文件关闭其他进程,并且可能存在潜在危险。

一旦你知道它的句柄就可以考虑使用http://msdn.microsoft.com/en-us/library/ms686714(VS.85).aspx终止进程(使用P / Invoke从C#访问它)

修改:另请参阅以下问题以帮助确定锁定文件的过程句柄,Using C#, how does one figure out what process locked a file?

答案 1 :(得分:3)

我不确定这是个好主意......这取决于“其他”应用程序对该文件的作用以及它是否会对系统或数据稳定性/完整性产生任何影响。

话虽如此,您可以通过炮轰Sysinternals Handle之类的内容来获取所需的功能,以获取其他程序的身份,并强制它以任何必要的方式释放文件。 / p>

我首选的选项是进入等待循环,直到该文件被其他应用程序释放,然后将其删除。不过那只是我。

- EDIT-- 如果有问题的文件位于网络共享上,这个想法会更加复杂 - 在这种情况下,您不会知道锁定文件的进程是什么,因为它可能不在您的计算机上。 (实际上,我不确定如何使用各种文件共享锁文件 - 更复杂;)

答案 2 :(得分:2)

尝试this

虽然我不建议关闭其他进程的句柄,除非你真的知道这样做的后果!

答案 3 :(得分:1)

您可能没有权利这样做,无论如何,您的代码示例会导致异常抛出异常。以编程方式,在C#下,会有很多pinvokes来获取安全凭证并允许你的程序从另一个进程中刷出文件,使用进程注入将进程自己的死手抬离文件 - 这又回到了这个 - 为什么你还想把它做到另一个过程吗?

如果你不这样说,这是非常可疑的......你可能会在该过程中导致程序损坏(它可能是出于自己的原因使用它),如果你尝试过,那么这个过程最终会失败,因为那样资源不再存在......

希望这有帮助, 最好的祝福, 汤姆。

答案 4 :(得分:0)

如果您的文件是文本文件,那么您不需要删除文件(从代码中退出进程是一个坏主意),而是可以将文本文件清空。

if (File.Exists(filePath)){
  File.WriteAllText(filePath, String.Empty);
 }