c# - 如何在 C# 中使用 StreamReader 从特定位置读取文件?

标签 c#

我有一个文本文件,我想从一个特定的文件末尾读取这个文本文件。

我可以通过以下方式做到这一点。

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/

相关文章:

c# - 清除 mdf 数据库时自动递增的主键

c# - 静态属性的默认值

c# - 试图防止此死锁发生在我在 SQL Server 上的 .NET 代码中

c# - 使 Gridview 的一个字段成为选择链接?

c# - Unity Cube 游戏对象变换位置不变

c# - Silverlight DataGrid 模板列

c# - 变量在 Update() 中不断累加

c# - 如何解决试图在 C# 中除以零?

c# - 反序列化导致列表条目的副本

c# - 以编程方式批处理文件以在夜间复制