C# C强制关闭打开的文件#

C# C强制关闭打开的文件#,c#,file-io,locking,move,C#,File Io,Locking,Move,我发现了一个类似的问题,但答案是“不要那样做” 我所处的情况是,我不关心其他应用程序会发生什么,我希望获取一个可能被其他人锁定的文件(如果需要,可以粗鲁地锁定),并按照自己的方式处理。我可能需要移动、重命名或删除此文件 基本上,我需要处理一个目录中的文件,这个目录是由一个应用程序创建的,它不会清除它的锁。我知道当我打电话时,应用程序已经完成了处理,但我需要在运行时关闭锁。此外,我似乎与扫描服务器所在的远程共享的本地AV软件的读取冲突 所有这些加起来就是一个无法解决的“强行关闭”局面,所以我可以做

我发现了一个类似的问题,但答案是“不要那样做”

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

基本上,我需要处理一个目录中的文件,这个目录是由一个应用程序创建的,它不会清除它的锁。我知道当我打电话时,应用程序已经完成了处理,但我需要在运行时关闭锁。此外,我似乎与扫描服务器所在的远程共享的本地AV软件的读取冲突


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

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

然后,这篇文章概述了关闭它们的方法:


这可能是不相关的,如果是,请别人发表评论,但我以前在explorer中使用过一种解决文件锁定问题的方法。
如果某个文件被一个已停止运行的进程锁定,Windows通常不允许您删除该文件,但如果您在其他地方创建了一个同名的新文件,将其移动到文件夹中,则会成功。然后可以删除新文件,一切正常。
要在应用程序中使用此文件,您必须先读取文件并将其保存在内存中,然后在删除旧文件后再将其写出来。
也许会有帮助,也许不会,但值得一试

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