我想关闭一个文件
Posted
技术标签:
【中文标题】我想关闭一个文件【英文标题】:I want to close a file 【发布时间】:2011-01-15 17:05:44 【问题描述】:我有一个文件,我想以编程方式关闭该文件,该文件被另一个进程使用。
问题是我想从另一个使用该文件的进程中释放该文件,然后将其删除。无论如何以编程方式执行此操作? 我正在使用 c#..
如何删除这个??
我做了一个类似的代码,
if (File.Exists(filePath)) File.Delete(filePath);
删除文件
【问题讨论】:
相关:***.com/questions/1977611/… 【参考方案1】:这取决于过程。您没有必要有权关闭使用该文件的其他进程,这可能存在潜在危险。
您可以考虑使用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?
【讨论】:
【参考方案2】:我不确定这是一个好主意...这将取决于“其他”应用程序对文件执行的操作以及它是否会对系统或数据稳定性/完整性产生任何影响。
话虽如此,您也许可以通过使用类似Sysinternals Handle 的方式获得所需的功能,以获取其他程序的身份并强制它以任何必要的方式释放文件。
不过,我更喜欢的选择是进入等待循环,直到文件被其他应用程序释放,然后将其删除。不过,这只是我。
--编辑-- 如果有问题的文件位于网络共享上,这个想法会更加复杂——在这种情况下,您将不知道是哪个进程锁定了该文件,因为它可能不在您的机器上。 (实际上,我不确定各种文件共享如何锁定正在使用的文件 - 更复杂;))
【讨论】:
【参考方案3】:试试this。
虽然我不建议关闭其他进程的句柄,除非你真的知道这样做的后果!
【讨论】:
【参考方案4】:您可能没有任何权利这样做,而且无论如何您的代码示例都会引发异常。以编程方式,在 C# 下,将有很多 pinvokes 来获取安全凭证并允许您的程序从另一个进程中刷出文件,使用进程注入将进程自己的死手指从文件中取出 - 这又回到了这个 - 为什么你想对另一个进程这样做吗?
如果您没有我说的话,那是非常可疑的...您可能会在该进程中导致程序损坏(它可能出于自己的原因使用它),如果您尝试过,该进程最终会失败,因为资源不存在了...
希望这会有所帮助, 最好的祝福, 汤姆。
【讨论】:
【参考方案5】:如果你的文件是文本文件,那么你不需要删除你的文件(从你的代码中退出进程是个坏主意),你可以让你的文本文件为空。
if (File.Exists(filePath))
File.WriteAllText(filePath, String.Empty);
【讨论】:
以上是关于我想关闭一个文件的主要内容,如果未能解决你的问题,请参考以下文章
如果我想修改声音文件并将其保存回来,我应该寻找哪些 C++ 库? [关闭]