我可以将 StreamReader 放入列表中吗?或者任何其他方式一次读取大量文本文件?
Can I put StreamReaders in a list? Or any other way to read a lot of text files at once?
我有很多文本文件,想一次性全部看完,怎么办?
到目前为止,这是我的代码:
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();
知道如何解决这个问题吗?提前致谢
using
语句也定义了变量的范围。一旦每个 using
语句中的语句块完成,qwe
和 qwer
就会超出范围。
要解决此问题,请不要使用 using
:
StreamReader qwe = new StreamReader("C:\123.txt");
lijst.Add(qwe);
或者只是
lijst.Add(new StreamReader("C:\123.txt"));
但请注意,该文件将立即打开,并且仅在列表及其所有读取器超出范围时关闭(或者如果您明确关闭读取器)。
无论如何,它的效率不是很高,您不应该对包含数百个文件的列表执行此操作。更好的解决方案是存储文件名列表,并使实际打开的文件尽可能短,每次打开的文件越少越好。
您没有使用大括号,因此看不到对象的放置位置。您的代码与此代码相同:
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();
}
我有很多文本文件,想一次性全部看完,怎么办? 到目前为止,这是我的代码:
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();
知道如何解决这个问题吗?提前致谢
using
语句也定义了变量的范围。一旦每个 using
语句中的语句块完成,qwe
和 qwer
就会超出范围。
要解决此问题,请不要使用 using
:
StreamReader qwe = new StreamReader("C:\123.txt");
lijst.Add(qwe);
或者只是
lijst.Add(new StreamReader("C:\123.txt"));
但请注意,该文件将立即打开,并且仅在列表及其所有读取器超出范围时关闭(或者如果您明确关闭读取器)。 无论如何,它的效率不是很高,您不应该对包含数百个文件的列表执行此操作。更好的解决方案是存储文件名列表,并使实际打开的文件尽可能短,每次打开的文件越少越好。
您没有使用大括号,因此看不到对象的放置位置。您的代码与此代码相同:
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();
}