【问题标题】:How to Kill a process on a specific file without using a third party program?如何在不使用第三方程序的情况下杀死特定文件的进程?
【发布时间】:2017-04-24 02:11:46
【问题描述】:

我有一个 test.log 文件,我想以编程方式对其进行编辑。

string text = File.ReadAllText("test.log");
text = text.Replace("xxx", "yyy");
File.WriteAllText("test.log", text);

但我收到错误消息“文件正在被另一个进程使用”。

如何找到使用这个文件的进程来杀死它?

我使用了这个代码Process.GetProcesses(),但这是一个很长的列表,没有任何有用的信息。另外,这个文件是从dll 生成的,我无权访问它的代码。

我也不能为此目的使用第三方程序,例如 lockhunterhandel.exe

【问题讨论】:

标签: c#


【解决方案1】:

您是否正在寻找这样的东西:

public static List<Process> GetProcessesLockingFile(string filePath)
{
    var procs = new List<Process>();

    var processListSnapshot = Process.GetProcesses();
    foreach (var process in processListSnapshot)
    {
        Console.WriteLine( process.ProcessName);
        if (process.Id <= 4) { continue; } // system processes
        var files = GetFilesLockedBy(process);
        if (files.Contains(filePath))
        {               
            Console.WriteLine("--------------->" + process.ProcessName);
            procs.Add(process);
        }
    }

    return procs;
}

以下是对您有帮助的链接。这看起来就像这里使用的确切问题:

https://www.codeproject.com/questions/531409/fileplusisplususedplusbyplusanotherplusprocessplus

【讨论】:

  • GetFilesLockedBy 属于哪个库/命名空间?
  • 没关系,我找到了。您的代码与此处的代码非常相似:stackoverflow.com/questions/860656/…。最好在此处提供您使用的任何非标准方法的完整实现(不在 .NET 或某些第 3 方库中的方法)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-05
  • 1970-01-01
  • 1970-01-01
  • 2012-02-22
  • 2022-08-08
  • 1970-01-01
相关资源
最近更新 更多