gpt4 book ai didi

c# - 读取不断从游戏服务器获取新数据的日志文件

转载 作者:行者123 更新时间:2023-11-30 13:05:02 29 4
gpt4 key购买 nike

我目前正在为游戏服务器创建报告机器人。游戏服务器是使命召唤 4。该游戏服务器将所有游戏中发生的事情写入默认名为 games_mp.log 的 .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;
}

希望有人能帮助我。

皮姆·卓格

最佳答案

我假设你的意思是当你说游戏服务器关闭时:

It only reads the file once the server is shutdown

如果与游戏服务器的连接断开会怎样? FileSystemWatcher.Changed 事件是否触发?

这可能是服务器保持日志文件打开而不关闭文件流和引发 FileSystemWatcher.Changed 事件的方式。

您是否尝试过使用 NotifyFilter.Size 进行触发?即:

watcher.NotifyFilter = NotifyFilters.Size;

默认使用LastWrite, FileName, DirectoryName .因此,如果出于某种原因 LastWrite 未更新但大小更新,则会触发。

要进一步诊断它,您可以使用计时器中的 FileInfo 对象检查文件属性,以记录您通知的属性并验证它们是否按预期更改。但是,如果实际更改了 NotifyProperty,则会触发 FileSystemWatcher.Changed 事件。我的猜测是外部服务器端的文件系统机制在关闭之前不会完全刷新到文件。

关于c# - 读取不断从游戏服务器获取新数据的日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6442033/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com