【问题标题】:C# - Streamreader - Read position and start from specific positionC# - Streamreader - 读取位置并从特定位置开始
【发布时间】:2018-11-14 18:08:28
【问题描述】:

场景:

  • 我得到了一个包含 10 行文本的 .txt 文件。
  • 我有两个 Streamreader(reader1、reader2)。
  • 我希望 reader1 阅读第 1-6 行
  • 之后我希望 reader2 阅读第 7-10 行

因此我需要获取 reader1 的最后一个位置,并且我必须在相同位置加一开始 reader2。

Streamreader 可以做到这一点吗?是否有任何“位置”、索引或类似的东西可以帮助我浏览 .txt 文件。

【问题讨论】:

  • 这听起来像是一个 XY 问题...您要在这里实现的更大场景是什么?
  • 你总是可以做var firstPart = File.ReadLines(filePath).Take(6); var secondPart = File.ReadLines(filePath).Skip(6).Take(4);,但是先把10个都拿走然后把它们分开会更有效。
  • 不是一个好方法。解析文本文件有很多更好的方法。
  • 就像@RufusL,我很好奇你为什么要这样做。但是,如果您在 Stream 上构建您的 StreamReader(或使用 BaseStream 属性提取底层流),您应该能够在该流上玩位置游戏。但不能保证它会起作用。
  • 这是一个糟糕的方法,我认为它完全没有用。您应该使用一个 StreamReader 线性读取文件。

标签: c# indexing stream position streamreader


【解决方案1】:

使用here提到的技术,你可以做这样的事情

StreamReader r1;
StreamReader r2;
string file="filepath.txt";

ReadLine(file,1,6,ref r1);
ReadLine(file,7,10,ref r2);
string ReadLine(string fileName, int start,int end,ref StreamReader rdr)
{
   try{
       using (rdr = new StreamReader(fileName)) {
      for (int i = start; i <=end; i++)
      rdr.ReadLine();
      return sr.ReadLine();
      }
}
    catch(Exception ex)
    {
     }
}

【讨论】:

    猜你喜欢
    • 2017-02-12
    • 2016-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多