2017-04-25 78 views
1

我正在嘗試使用for循環運行100次來讀取文本文件。使用for循環讀取完整的文本文件

StreamReader reader = new StreamReader("client.txt");  
for (int i=0;i<=100;i++) 
{ 
    reader.readline(); 
} 

現在,如果文本文件有100行但如果讓說,700所以我希望循環100次運行,但在每個run.How讀「1%」的文件能正常工作會我那樣做?

+0

是否有一個原因,你不能將整個文件讀入內存然後從那裏操作它? – maccettura

+0

https://msdn.microsoft.com/en-us/library/94223t4d.aspx但File.ReadAllLines更好。 –

+0

一個進度條顯示「文件讀取」進度。所以我需要它在for循環中運行100次。這就是爲什麼我沒有閱讀整個文件... –

回答

3

如果文件大小不是太大,您可以:

string[] lines = File.ReadAllLines("client.txt"); 

string text = File.ReadAllText("client.txt"); 

每次讀1%是一個有點棘手,我會伴讀線的方法去通過線:

var filename = "client.txt"; 
var info = new FileInfo(filename); 
var text = new StringBuilder(); 

using (var stream = new FileStream(filename, FileMode.Open)) 
using (var reader = new StreamReader(stream)) 
{ 
    while (!reader.EndOfStream) 
    { 
     text.AppendLine(reader.ReadLine()); 
     var progress = Convert.ToDouble(stream.Position) * 100/info.Length; 
     Console.WriteLine(progress); 
    } 
} 

var result = text.ToString(); 

但請注意,進度不會很準確,因爲StreamReader.ReadLine(等效和ReadLineAsync)通常會讀取的不僅僅是一行 - 它基本上讀入一個緩衝區,然後解釋該緩衝區。這比一次讀取單個字節要有效得多,但這確實意味着流將比嚴格意義上的進步更進一步。

+0

許多很多謝謝,我能夠使它像這樣工作。 –

+0

@chris歡迎您:) – Andrei

相關問題