C# 如何在不使用第三方程序的情况下终止特定文件上的进程?

C# 如何在不使用第三方程序的情况下终止特定文件上的进程?,c#,C#,我有一个test.log文件,我想以编程方式编辑它 string text = File.ReadAllText("test.log"); text = text.Replace("xxx", "yyy"); File.WriteAllText("test.log", text); 但我收到错误“文件正被另一个进程使用。” 如何找到使用此文件杀死它的进程 我使用了这个代码Process.GetProcesses(),但是这是一个很长的列表,没有任何有用的信息。另外,这个文件是由dll生成的,我

我有一个test.log文件,我想以编程方式编辑它

string text = File.ReadAllText("test.log");
text = text.Replace("xxx", "yyy");
File.WriteAllText("test.log", text);
但我收到错误“文件正被另一个进程使用。”

如何找到使用此文件杀死它的进程

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


我也不能为此使用第三方程序,如
lockhunter
handel.exe

您是否正在寻找类似的程序:

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;
}
公共静态列表GetProcessLockingFile(字符串文件路径)
{
var procs=新列表();
var processListSnapshot=Process.getProcesss();
foreach(processListSnapshot中的var进程)
{
Console.WriteLine(process.ProcessName);

如果(process.Id也许最好找出为什么某些进程会锁定您的日志文件并修复真正的问题,而不是仅仅杀死一些随机进程?作为旁注:日志文件通常只是附加的。您不应该真正更改它,而应该处理它或更改它的生成方式。可能与库/命名空间重复
 GetFilesLockedBy
属于?没关系,我找到了。您的代码与此处的代码非常相似:。最好在此处提供您使用的任何非标准方法(不在.NET或某些第三方库中的方法)的完整实现。