【问题标题】:I want to close a file我想关闭一个文件
【发布时间】:2011-01-15 17:05:44
【问题描述】:

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

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

如何删除这个??

我做了一个类似的代码,

if (File.Exists(filePath)) File.Delete(filePath);

删除文件

【问题讨论】:

标签: c# .net


【解决方案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);
           }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-06-18
            • 1970-01-01
            • 1970-01-01
            • 2013-09-05
            相关资源
            最近更新 更多