我可以将StreamReaders放入列表中吗?或者任何其他方式一次读取大量文本文件?

时间:2015-06-14 20:35:03

标签: c# list text streamreader

我有很多文本文件,想要一次读取它们,我该怎么做? 这是我的代码,直到现在:

List<StreamReader> lijst = new List<StreamReader>();
using (StreamReader qwe = new StreamReader("C:\\123.txt"))
using (StreamReader qwer = new StreamReader("C:\\1234.txt"))
lijst.Add(qwe);
lijst.Add(qwer);

但是在执行此操作时,我得到一个ObjectDisposedException(无法从已关闭的TextReader读取。)

lijst[0].Readline();

知道怎么解决这个问题吗? Thansk提前

2 个答案:

答案 0 :(得分:1)

using语句还定义了变量的范围。只要每个using语句中的语句块结束,qweqwer就会超出范围。

要解决此问题,请不要使用using

StreamReader qwe = new StreamReader("C:\\123.txt");
lijst.Add(qwe);

或只是

lijst.Add(new StreamReader("C:\\123.txt"));

请注意,该文件将立即打开,并且只有在列表及其所有读取器超出范围时(或者如果您明确关闭读取器)才会关闭。 无论如何,它不是很有效,你不应该用数百个文件的列表来做。更好的解决方案是存储文件名列表,并尽可能缩短实际文件的开放时间,尽可能少。

答案 1 :(得分:1)

您没有使用花括号,因此您无法看到对象的放置位置。您的代码与此代码相同:

List<StreamReader> lijst = new List<StreamReader>();
using (StreamReader qwe = new StreamReader("C:\\123.txt"))
{
    using (StreamReader qwer = new StreamReader("C:\\1234.txt"))
    {
        lijst.Add(qwe);
    }
}
lijst.Add(qwer);

这意味着当您到达此代码的最后一行时,您的流阅读器已经处理完毕。在你的情况下,你不应该使用using,但你需要确保之后处理流阅读器:

try
{
    List<StreamReader> lijst = new List<StreamReader>();
    StreamReader qwe = new StreamReader("C:\\123.txt");
    StreamReader qwer = new StreamReader("C:\\1234.txt");
    lijst.Add(qwe);
    lijst.Add(qwer);

    // Use the stream readers
}
// you can use or not use catch here, it depends
finally
{
    qwe.Dispose();
    qwer.Dispose();
}