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

C#文本文件字符串搜索问题:未找到时无法正确提示

C#文本文件字符串搜索问题解决

原代码存在的核心问题

  • 重复读取文件:for循环的每一次迭代都重新打开并读取整个文件,完全没必要,且导致行号判断错误(变量i和实际文件行号不对应)。
  • 未找到的判断逻辑错误:用StrLine == string.Empty判断未找到不成立,因为文件最后一行可能非空,即使搜索不到,StrLine也会是文件最后一行的内容而非空字符串。
  • 找到匹配后未终止搜索:找到目标字符串后仍会继续读取文件,可能覆盖之前的结果提示。

修正后的代码

我们可以一次性逐行读取文件,同时跟踪行号,找到匹配后立即更新提示并终止搜索;如果遍历完所有行都没找到,再显示未找到提示。

private void BtnSearch_Click(object sender, EventArgs e)
{
    string searchTerm = TxtSearchTerm.Text.Trim(); // 去除首尾空白,避免匹配错误
    string textFile = Path.Combine(Application.StartupPath, "TextFile.txt"); // 用Path.Combine更安全

    bool found = false;
    int lineNumber = 0;

    // 逐行读取文件,无需手动管理StreamReader
    foreach (string line in File.ReadLines(textFile))
    {
        lineNumber++;
        if (line.Trim() == searchTerm) // 去除行首尾空白,匹配更准确
        {
            LblSearch.Text = $"{searchTerm} 找到于行号: {lineNumber}";
            found = true;
            break; // 找到后立即停止搜索
        }
    }

    // 遍历完所有行都没找到,显示提示
    if (!found)
    {
        LblSearch.Text = $"未找到单词: {searchTerm}";
    }
}

代码优化点说明

  • 使用File.ReadLines():逐行读取文件,内存效率高(不会一次性加载整个文件到内存),无需手动处理流的关闭。
  • 引入found标记:清晰跟踪是否找到目标字符串,避免逻辑混乱。
  • 用Path.Combine()拼接路径:避免手动拼接路径时的斜杠问题,跨平台兼容性更好。
  • 增加Trim()处理:去除搜索词和行文本的首尾空白,避免因意外空格导致匹配失败。

如果需要支持多个匹配结果(显示所有找到的行号),可以修改代码如下:

private void BtnSearch_Click(object sender, EventArgs e)
{
    string searchTerm = TxtSearchTerm.Text.Trim();
    string textFile = Path.Combine(Application.StartupPath, "TextFile.txt");

    List<int> matchedLines = new List<int>();
    int lineNumber = 0;

    foreach (string line in File.ReadLines(textFile))
    {
        lineNumber++;
        if (line.Trim() == searchTerm)
        {
            matchedLines.Add(lineNumber);
        }
    }

    if (matchedLines.Count > 0)
    {
        LblSearch.Text = $"{searchTerm} 找到于行号: {string.Join(", ", matchedLines)}";
    }
    else
    {
        LblSearch.Text = $"未找到单词: {searchTerm}";
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 15:27:42