我有一个文本文件,我想从一个特定的文件末尾读取这个文本文件。
我可以通过以下方式做到这一点。
string path = @"C:\abc.txt";
var pp = File.ReadAllLines(path).Skip(1).Take(2);
但我希望仅使用 StreamReader 来完成此操作。
我正在这样做,但没有给出正确的结果。
using (Stream stream = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using (StreamReader streamReader = new StreamReader(stream))
{
var str = streamReader.ReadLine().Skip(1).Take(2);
}
}
我也可以通过以下方式做到这一点。但我想避免 for 循环。
using (Stream stream = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using (StreamReader streamReader = new StreamReader(stream))
{
int count=2;
for (int i = 0; i < count; i++)
{
streamReader.ReadLine();
}
string data = streamReader.ReadLine();
}
}
我的问题一点都不重复,上一个问题是关于读取所有文件,但我的问题是从特定行读取到最后。
最佳答案
您只需要 两 行 - Skip(1).Take(2)
- 为什么不直接读取它们?
using (StreamReader streamReader = new StreamReader(stream)) {
streamReader.ReadLine(); // skip the first line
// take next two lines
string[] data = new string[] {
streamReader.ReadLine(),
streamReader.ReadLine(),
};
...
}
请注意,您当前使用 StreamReader
的代码等于 Skip(2).Take(1).First()
。在一般情况 - Skip(M).Take(N)
- 中,您必须使用 for 循环(或其模拟):
using (StreamReader streamReader = new StreamReader(stream)) {
// Skip M first items
for (int i = 0; i < M; ++i)
streamReader.ReadLine();
string[] data = new string[N];
// Take N next items
for (int i = 0; i < N; ++i)
data[i] = streamReader.ReadLine();
}
关于c# - 如何在 C# 中使用 StreamReader 从特定位置读取文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39851703/