我可以将 StreamReader 放在列表中吗?或任何其他一次读取大量文本文件的方法

本文关键字:一次 读取 方法 文件 文本 其他 StreamReader 列表 任何 我可以 | 更新日期: 2023-09-27 17:56:04

我有很多文本文件,想一次全部读取,我该怎么做?这是我到目前为止的代码:

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(无法从关闭的文本阅读器读取):

lijst[0].Readline();

知道如何解决这个问题吗?提前感谢斯克

我可以将 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);

这意味着,当您到达此代码的最后一行时,您的流读取器已经释放。在您的情况下,您不应该使用 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();
}

using 语句还定义了变量的作用域。一旦每个using语句中的语句块完成,qweqwer就会超出范围。

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

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

或者只是

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

但请注意,该文件将立即打开,并且仅在列表及其所有读取器超出范围(或显式关闭读取器)时关闭。无论如何,它不是很有效,你不应该使用数百个文件的列表来做到这一点。更好的解决方案是存储文件名列表,并使实际文件尽可能短,

并且一次尽可能少。