我目前正在为游戏服务器创建报告机器人。游戏服务器是“使命召唤4”。该游戏服务器将所有游戏内事件写入默认情况下调用的.log文件games_mp.log。这个文件一直由游戏服务器保持打开,直到你关闭游戏服务器。 现在,使用FileShare.ReadWrite时应该不会出现问题,以便覆盖零件。 我想要的是,我读了添加到这个日志文件的新行,它被游戏服务器添加并将其放置在IRC中。阅读从游戏服务器获取新数据的日志文件
IRC部分我已经启动并运行,但读取日志文件部分不适合我。我已经尝试了几个像filesystemwatcher这样的东西,但是这个似乎没有工作。它只在服务器关闭后才读取文件。虽然日志文件确实可以从服务器上发生的事情中获取新数据。 (希望我现在不会混淆你:))
所以我想要做的是这样的: 连续读取日志文件。游戏服务器尽快向日志文件添加新行,在IRC上发布这条新消息。当然不适当的格式化,并检查是否是我想要在IRC上发布的数据,但首先我想让阅读部分工作。
这是我使用FileSystemWatcher的时使用的代码的一部分:
FileSystemWatcher watcher = new FileSystemWatcher();
private void watching()
{
watcher.Path = @"D:\Games\Call of Duty 4 - Modern Warfare\main";
watcher.Filter = "games_mp.log";
watcher.Changed += new FileSystemEventHandler(watcher_Changed);
watcher.EnableRaisingEvents = true;
}
private void watcher_Changed(object sender, FileSystemEventArgs e)
{
ReadNewData();
}
private void ReadNewData()
{
string line = string.Empty;
FileStream file = new FileStream( @"D:\Games\Call of Duty 4 - Modern Warfare\main\games_mp123.log", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
file.Seek(previousEndPosition, SeekOrigin.Begin);
TextReader reader = new StreamReader(file);
while((line = reader.ReadLine()) != null)
{
IRCClass.client.SendChat(line, "#CodTest");
}
previousEndPosition = file.Position;
}
希望有人能帮助我。
皮姆Dröge
尚未尝试使用文件大小通知过滤器。我会给它一个去,让你知道它是否工作。无论如何感谢您的帮助 –
我已经给大小一个尝试,它实际上部分工作。现在,只有当我单击浏览器中的实际文件时,它才会触发更改事件BUT。也许我仍然做错了什么?我检查过fileinfo对象,size属性正在更新,因为它应该。 lastwrite特性不是这样的,为什么它以前失败了。有什么建议么? –
现在我找到了一个解决方法。我现在复制原始文件,并且每隔100毫秒将其重命名为一个计时器,并让文件系统监视器监视复制的文件。这样它似乎工作。然而,这不是一个理想的方式。所以,如果你有其他的建议或者完全不同的方法,我全都是耳朵。 –