C#文本文件多关键词搜索仅最后一个词可检索问题求解
问题根因
StreamReader.ReadToEnd()执行一次后读取指针会移动到文件末尾,后续再调用该方法只会返回空字符串,除了第一次循环的关键词,后续所有关键词都无法匹配到实际文件内容。- 文本框赋值逻辑错误:每次循环无论匹配结果如何都会直接覆盖文本框的值,即使前面的关键词匹配成功,后续循环的匹配失败结果也会把文本框内容覆写,只有最后一次循环的结果会保留,因此你会看到只有最后一个关键词能检索成功的假象。
修复代码
建议一次性读取文件内容后再遍历关键词匹配,同时使用内置方法自动释放文件资源,避免文件占用:
string[] words = { "var", "bob", "for", "example" }; // 一次性读取所有文本,无需手动维护流状态 string fileContent = File.ReadAllText("test.txt"); bool hasMatch = false; foreach (string keyword in words) { if (fileContent.Contains(keyword)) { hasMatch = true; // 匹配到任意关键词即可提前终止遍历 break; } } textBox1.Text = hasMatch ? "founded" : "nothing founded";
如果必须使用StreamReader实现,需要将文件读取操作移到循环外,提前存储读取结果即可:
string[] words = { "var", "bob", "for", "example" }; string fileContent; // using语句会自动释放StreamReader资源 using (StreamReader file = new StreamReader("test.txt")) { fileContent = file.ReadToEnd(); } bool hasMatch = false; foreach (string keyword in words) { if (fileContent.Contains(keyword)) { hasMatch = true; break; } } textBox1.Text = hasMatch ? "founded" : "nothing founded";
内容的提问来源于stack exchange,提问作者vitem
相关产品推荐
相关产品推荐

