我有一个文件,我想以编程方式关闭该文件,这是另一个进程使用的。
问题是我想从另一个进程中释放文件,无论哪个使用它然后删除它..无论如何以编程方式执行此操作? 我正在使用c#..
如何删除这个?
我已经完成了像
这样的代码if(File.Exists(filePath)) File.Delete(文件路径);
删除文件
答案 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);
}