C# 一次读取 3 个文件,搜索字符串并显示结果
本文关键字:字符 搜索 字符串 串并 结果 显示 文件 一次 读取 | 更新日期: 2023-09-27 18:35:28
我正在开发一个程序,该程序将一次打开 3 个文件,搜索字符串(游戏名称),然后在列表框中显示结果,其中包含 3 个文件中的信息。
到目前为止,我有这个
string gamesData;
string salesData;
string compData;
string textBox;
StreamReader gamesFile, salesFile, compFile;
gamesFile = File.OpenText("game.dat");
salesFile = File.OpenText("SalesNumbers.dat");
compFile = File.OpenText("company.dat");
textBox = searchTxtBox.Text;
while (!gamesFile.EndOfStream)
{
if (searchTxtBox.Text != "")
{
if(searchTxtBox.Text.Trim() == gamesData)
{
string.Compare(textBox, gamesData);
gamesData = gamesFile.ReadLine();
salesData = salesFile.ReadLine();
compData = compFile.ReadLine();
listBoxGames.Items.Add(gamesData +"====" + salesData + "====" + compData);
}
else
if (microRb.Checked)
{
compData = "ms";
}
else
if (eaRb.Checked)
{
compData = "ea";
}
else
{
compData = "blz";
}
}
}
salesFile.Close();
gamesFile.Close();
compFile.Close();
当我单击搜索按钮时,程序变得无响应,我想知道是否有人指出我做错了什么,谢谢。
听起来你追求的是多线程/并发/并行编程,并且有多种方法可以做到这一点......
因此,这里有一些可以帮助您入门的内容。
string[] textFilePaths = new string[]{"games.dat", "SalesNumbers.dat", "company.dat"};
ConcurrentBag<string> bagOfStrings = new ConcurrentBag<string>();
Parallel.ForEach(textFilePaths, path =>
{
string text = File.ReadAllText(path);
bagOfStrings.Add(text);
});
foreach(var text in bagOfStrings)
{
Console.WriteLine (text);
}
您的代码创建了一个无限循环。 您的while
循环不会停止,直到您到达gamesFile
的末尾。 但是,您实际从gamesFile
中读取的行不会运行,因为它被if (searchTxtBox.Text.Trim() == gamesData)
包围。 您的gamesData
变量在前几行中声明,但尚未为其赋值,因此为 null。 searchTxtBox.Text.Trim()
不等于 null,因此您永远不会从 gamesFile 中读取。 所以,你永远不会到达gamesFile
的尽头,你的while
循环永远运行。
通读文件中各行的一个常见习惯用语是这样的:
while ((gamesData = gamesFile.ReadLine()) != null)
{
// do something with gamesData here
}
这是有效的,因为 ReadLine 在到达文件末尾时返回 null。 所以,你可以写这样的东西:
while ((gamesData = gamesFile.ReadLine()) != null && (salesData = salesFile.ReadLine()) != null)