You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让StreamReader读取Read.Line()流时仅显示最后匹配内容?

解决StreamReader读取文件只显示最后一个匹配项的问题

我懂你现在的烦恼——每次搜匹配内容弹出一堆MessageBox,15次弹窗确实够闹心的!你现在的问题根源是每找到一行匹配就立刻弹窗,而不是等读完整个文件后再展示最后那个匹配结果。咱们只需要调整一下逻辑,用一个变量存住最后匹配到的内容就行,具体改法如下:

修改后的代码示例

string tmpFile = "你的临时文件路径"; // 确保这里路径正确
string SteamLogFilePath = "你的Steam日志路径";
string lastMatch = null; // 用来存储最后一个匹配的行

try
{
    File.Copy(SteamLogFilePath, tmpFile, true);
}
catch (Exception ex)
{
    // 可选:添加异常提示,比如 MessageBox.Show("复制文件失败:" + ex.Message);
}

// 使用using包裹StreamReader,自动处理资源释放,避免泄漏
using (TextReader tr = new StreamReader(tmpFile))
{
    string line;
    // 优化循环条件,读取到文件末尾自动终止
    while ((line = tr.ReadLine()) != null) 
    {
        // 找到匹配行时,只更新lastMatch变量,不立刻弹窗
        if (line.Contains("RecvMsgClientLogOnResponse"))
        {
            lastMatch = line;
        }
    }
}

// 遍历完所有行后,再弹出最后一个匹配的内容
if (lastMatch != null)
{
    MessageBox.Show(lastMatch);
}

关键修改点说明

  • 新增lastMatch变量:专门记录每次匹配到的最新行,后面的匹配会覆盖前面的,最终只会保留最后一个匹配项
  • 移走循环内的弹窗操作:把原来在循环里的MessageBox.Show放到循环结束后,确保只弹一次,展示最后找到的结果
  • 改用using管理资源:自动释放StreamReader占用的文件资源,比手动try/finally写法更安全简洁
  • 优化循环逻辑:把while(true)改成while ((line = tr.ReadLine()) != null),读取到文件末尾时自动终止循环,避免无限循环的风险

这样修改后,你就只会看到一次弹窗,显示的就是文件中最后一个包含指定字符串的行啦!

内容的提问来源于stack exchange,提问作者Xhonor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:45:04