【问题标题】:Forcing closed an open file by C#C#强制关闭一个打开的文件
【发布时间】:2010-08-19 22:29:12
【问题描述】:

我发现了一个类似的问题here,但它已被关闭/接受,答案是“不要那样做”。

我的情况是,我不在乎其他应用程序会发生什么,我想获取一个可能被其他人锁定的文件(如果需要,粗鲁地)并按我的方式处理它。我可能需要移动、重命名或删除此文件。

基本上,我需要处理由应用程序创建的目录中的文件,该应用程序不会清理它的锁。我知道应用程序在我的调用时已完成处理,但我需要在运行时终止锁。此外,我似乎与本地 AV 软件的读取冲突,该软件扫描服务器所在的远程共享。

所有这些加起来就是一个无法解决的“强制关闭”情况,所以我可以做我需要做的事情。有人知道该怎么做吗?

【问题讨论】:

    标签: c# file-io locking move


    【解决方案1】:

    首先,您可以使用这篇文章来验证锁定它们的是不可靠的应用程序:

    How do I find out which process is locking a file using .NET?

    那么这篇文章概述了关闭它们的方法:

    http://social.msdn.microsoft.com/Forums/en-US/csharplanguage/thread/04a1e899-2a38-4d95-8ed5-6d53344e4d76

    【讨论】:

      【解决方案2】:

      这可能无关紧要,如果是,请有人发表评论,但我之前在资源管理器中使用过一种解决方法来解决文件锁定问题。
      如果一个文件被一个已死的进程锁定,Windows 通常不会让你删除它,但如果你在其他地方创建了一个同名的新文件,将它移到文件夹中它会成功。然后您可以删除新文件,一切都很好。
      要将它用于您的应用程序,您必须能够在执行此操作之前读取文件并将其保存在内存中,然后在摆脱旧文件后将其写回。
      也许会有所帮助,也许不会,但值得一试。

      【讨论】:

        【解决方案3】:
            foreach (var process in Process.GetProcessesByName("excel")) //whatever you need to close 
            {
                if (process.MainWindowTitle.Contains("test.xlsx"))
                {
                    process.Kill();
                    break;
                }
            }
        

            foreach (var process in Process.GetProcesses())
            {
                if (process.MainWindowTitle.Contains("test.dat"))
                {
                    process.Kill();
                    break;
                }
            }
        

        【讨论】:

          猜你喜欢
          • 2012-04-16
          • 1970-01-01
          • 2012-10-01
          • 1970-01-01
          • 2010-10-17
          • 2010-12-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多