背景:
我目前正在从事一个项目,该项目从名为《炉石传说》的游戏读取日志文件。想法是该程序监视对日志文件所做的任何更改(我通过检查其大小更改来完成此操作),然后触发一个事件,该事件读取某些关键字的日志文件。
问题:
我当前面临的问题是,当事件触发时,我得到“文件正在被另一个进程使用”错误。作为一项变通办法,我制作了一个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程序使用日志文件的同时可以访问日志文件吗?