CheckedItems的foreach循环中的StreamReader
本文关键字:StreamReader foreach CheckedItems 循环 | 更新日期: 2023-09-27 18:27:45
我有一个问题,我已经想了好几个小时了,我相信这很简单。
这是代码(删除了额外的垃圾,因为这不是问题)。
foreach (String itemChecked in fightsList.CheckedItems)
{
try
{
Thread.Sleep(50);
using (StreamReader reader = new StreamReader(new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite), Encoding.ASCII))
{
while ((line = reader.ReadLine()) != null)
{
// do all stuff to lines here...
}
}
}
catch (Exception error)
{
errorText.Text = error.ToString();
}
}
// foreach done here.
我正在读取一个文本文件,这在StreamReader中很明显,但当foreach循环滚动到第二次迭代时,它在运行StreamReader之前失败,并停止foreach循环。
第一个循环运行良好。
我认为这是一个问题,因为"StreamReader reader=new"已经存在,并且无法创建新的?
foreach是一个checkedBox字符串。StreamReader正在为循环中的所有实例读取相同的文件,我只处理每个实例的起点和终点。我的错误捕获没有得到任何结果,应用程序也没有崩溃。
我认为您有一个逻辑问题,因为您在循环中的每次迭代都试图从同一个文件中读取(除非您从代码中删除了相关内容)。如果你想在每次循环后从同一个文件中读取,那么你只需要在外部for循环之外创建一次流读取器。此外,由于您没有关闭文件,因此在第一次迭代后,您可能会遇到位于文件末尾的问题。这就解释了为什么它只在第一次运行
问题不在您发布的代码中。我建议将文件流作为一个单独的步骤进行分配,并在将其传递到StreamReader的行上放置一个断点。在第二遍中,确保底层流上的所有内容(文件名、长度等)看起来都正常——问题在循环中,否则它在代码的其他地方。
你也最好像一样重新组织你的代码
using(StreamReader reader = new StreamReader(new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite), Encoding.ASCII)){
while ((line = reader.ReadLine()) != null)
{
foreach (String itemChecked in fightsList.CheckedItems)
{
}
}
}
因为这会使昂贵的操作(文件IO)尽可能少地发生,但这并不是你遇到这个特定问题的原因。