一尘不染

如何读取文本文件中的指定行?

c#

给定一个文本文件,我将如何读取任意行,而文件中没有其他内容?

说,我有一个文件test.txt。我将如何读取文件中的第15行?

我所看到的是涉及将整个文本文件存储为String数组,然后将行号的值用作要从数组中使用的String的数量的东西…但是有一些复杂之处:文本文件是巨大且我正在编写应用程序的机器也不是一流的系统。速度不是重中之重,但这绝对是一个主要问题。

有什么方法 只能 读取文本文件的特定行并将结果存储为字符串吗?

感谢您的回复:该文件为KINDA结构。它有25行信息,然后 X 号线,但第25行17具有的价值 X

但是,这里有1个空行,它会在文件中的第二条记录中重复出现,并且 X 可以为每个记录取不同的值。

我想做的是读取并存储前25行作为独立值,然后存储接下来的 X行
(通常约250行)作为数组。然后,将其存储在SQL数据库中,并重复NEXT记录,直到到达第 Y 个记录为止(文件中的记录数在第3行中)

编辑2 :好吧,我想我已经基于您的全部回答达成了一个解决方案。

我将阅读前25行并将其存储为数组。我将把数组的相关内容复制到局部变量,然后删除前25行。然后,我可以使用该信息将接下来的 X
行(数组中第13项的值)存储为数组,对其进行序列化,将其存储在数据库中,然后删除我刚刚读取的行。

然后,我可以为每个后续记录重复该过程。

当然,这取决于我所做的一个假设,说实话,我不确定这是真的。是否可以从C#中的文本文件中删除前 n 行,而不必读取整个内容并在没有前 n
行的情况下重新编写它?


阅读 896

收藏
2020-05-19

共1个答案

一尘不染

.NET 4.0编辑

从.NET 4.0开始,可以直接访问文件的一行。例如,要访问第15行:

string line = File.ReadLines(FileName).Skip(14).Take(1).First();

这将仅返回所需的行


由于您无法预测文件中第i行的位置(可以吗?),因此您还必须阅读所有先前的行。如果行数较小,则这可能比该ReadAllLines方法更有效。

string GetLine(string fileName, int line)
{
   using (var sr = new StreamReader(fileName)) {
       for (int i = 1; i < line; i++)
          sr.ReadLine();
       return sr.ReadLine();
   }
}
2020-05-19