C#读取由外部进程打开的文件

时间:2018-06-20 07:50:20

标签: c# filestream

背景

我目前正在从事一个项目,该项目从名为《炉石传说》的游戏读取日志文件。想法是该程序监视对日志文件所做的任何更改(我通过检查其大小更改来完成此操作),然后触发一个事件,该事件读取某些关键字的日志文件。

问题:

我当前面临的问题是,当事件触发时,我得到“文件正在被另一个进程使用”错误。作为一项变通办法,我制作了一个FileStream,它提供了对日志文件的读写访问权限。这样做确实有必要在启动《炉石传说》之前首先安装该程序,但这是我愿意使用的必要条件。

现在我的理解是,这应该使日志文件对需要读取和/或写入该文件的任何其他进程打开。但是,当我启动Hearthstone时,它现在不再写入日志文件。

代码: 这些都在同一个班级。

FileStream:

static string filePath = "C:\\Program Files (x86)\\Hearthstone\\Logs\\Achievements.log";
    FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);

Watch方法:

private void Watch()
    {
        string fileName = "Achievements.log";

        watcher.Path = filePath;
        watcher.Filter = fileName;
        watcher.NotifyFilter = NotifyFilters.Size;
        watcher.EnableRaisingEvents = true;

        watcher.Changed += new FileSystemEventHandler(OnChange);
    }

OnChange事件:

private void OnChange(object sender, FileSystemEventArgs e)
    {
        // Debugger:
        Console.WriteLine("Debugger: OnChange event fired!");

        if (watcher.EnableRaisingEvents == true && SecondCall == 1)
        {
            watcher.EnableRaisingEvents = false;

            ReadLines(e.FullPath);

            OnSaveCommand();
            ResetState();
        }
        else
        {
            SecondCall += 1;
        }
    }

ReadLines方法:

private void ReadLines(string filePath)
    {
        using (fileStream)
        {
            var lastLine = File.ReadLines(filePath).Last();
            // Debugger:
            Console.WriteLine("Debugger: " + lastLine);
        }
    }

问题:

在Hearthstone程序使用日志文件的同时可以访问日志文件吗?

0 个答案:

没有答案