强制关闭C#打开的文件

时间:2010-08-19 22:29:13

标签: c# file-io locking move

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

我处在这样一种情况,我不关心其他应用程序发生了什么,我想要一个可能被其他人锁定的文件(如果需要可以粗暴地),并且可以使用它。我可能需要移动,重命名或删除此文件。

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

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

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

    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;
        }
    }