文本文件:逐行读取#

所以,假设我有一个包含20行的文本文件,每行都有不同的文本。 我希望能够有一个包含第一行的字符串,但是当我做NextLine(); 我希望它成为下一行。 我试过这个,但它似乎不起作用:

string CurrentLine; int LastLineNumber; Void NextLine() { System.IO.StreamReader file = new System.IO.StreamReader("c:\\test.txt"); CurrentLine = file.ReadLine(LastLineNumber + 1); LastLineNumber++; } 

我怎么能这样做? 提前致谢。

一般情况下,如果您能够以打开文件的方式设计它,而不是每次都尝试重新打开文件,那会更好。

如果这不切实际,您需要多次调用ReadLine

 string CurrentLine; int LastLineNumber; void NextLine() { // using will make sure the file is closed using(System.IO.StreamReader file = new System.IO.StreamReader("c:\\test.txt")) { // Skip lines for (int i=0;i 

请注意,这可以通过File.ReadLines简化:

 void NextLine() { var lines = File.ReadLines("C:\\test.txt"); CurrentLine = lines.Skip(LastLineNumber).First(); LastLineNumber++; } 

一个简单的电话应该这样做:

 var fileLines = System.IO.File.ReadAllLines(fileName); 

您需要validation文件是否存在,当然您仍需要查看空行或无效值,但这应该为您提供基础知识。 要循环文件,您可以使用以下内容:

 foreach (var singleLine in fileLines) { // process "singleLine" here } 

还有一点需要注意 – 您不希望对大文件执行此操作,因为它会处理内存中的所有内容。

好吧,如果你真的不介意每次重新打开文件,你可以使用:

 CurrentLine = File.ReadLines("c:\\test.txt").Skip(LastLineNumber).First(); LastLineNumber++; 

但是,我建议你使用File.ReadAllLines或者File.ReadLines(...).ToList()一次性阅读整个内容。

ReadLine方法已经读取了StreamReader的下一行,您不需要计数器或自定义函数。 只需继续阅读,直到达到20行或文件结束。

您不能将行号传递给ReadLine并期望它找到该特定行。 如果您查看ReadLine文档 ,您将看到它不接受任何参数。

 public override string ReadLine() 

处理文件时,必须将它们视为数据流 。 每次打开文件时,都从文件的第一个字节/字符开始。

 var reader = new StreamReader("c:\\test.txt"); // Starts at byte/character 0 

如果要读取更多行,则必须保持流打开。

 using (var reader = new StreamReader("c:\\test.txt")) { string line1 = reader.ReadLine(); string line2 = reader.ReadLine(); string line3 = reader.ReadLine(); // etc.. } 

如果你真的想编写一个方法NextLine ,那么你需要将创建的StreamReader对象存储在某个地方并且每次都使用它。 有点像这样:

 public class MyClass : IDisposable { StreamReader reader; public MyClass(string path) { this.reader = new StreamReader(path); } public string NextLine() { return this.reader.ReadLine(); } public void Dispose() { reader.Dispose(); } } 

但我建议你循环流:

 using (var reader = new StreamReader("c:\\test.txt")) { while (some_condition) { string line = reader.ReadLine(); // Do something } } 

或者使用FileReadAllLines方法一次获取所有行:

 string[] lines = System.IO.File.ReadAllLines("c:\\test.txt"); for (int i = 0; i < lines.Length; i++) { string line = lines[i]; // Do something }