我想关闭一个文件

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 ++二进制文件写[关闭]

如果我想修改声音文件并将其保存回来,我应该寻找哪些 C++ 库? [关闭]

如何在一个项目中使用多个 C++ 源代码文件? [关闭]

sublime text,只能打开一个窗口,打开一个就关闭了原来的那个,我想在新标签中打开一个文件,怎么搞呀

Linux配置文件库[关闭]