我有一个问题,我一直想弄清楚几个小时,我相信这很简单。
这是代码(删除了额外的垃圾,因为它不是问题)。
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正在为循环中的所有实例读取相同的文件,我只是处理每个开始和停止的位置。我的错误捕获没有得到任何东西,应用程序不会崩溃。
答案 0 :(得分:2)
我认为你有一个逻辑问题,因为你不断尝试从循环中的每次迭代读取同一个文件(除非你从你的代码中删除了相关内容)。如果你想在每次循环后从同一个文件中读取,那么你应该只需要在外部for循环之外创建一次流读取器。此外,由于您没有关闭文件,因此在第一次迭代后可能会遇到文件末尾的问题。这可以解释为什么它只能在第一次工作
答案 1 :(得分:0)
问题不在您发布的代码中。我建议将文件流分配为一个单独的步骤,并在您将其传递到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)尽可能少地发生,但这不是你遇到这个特定问题的原因。