使用for循环读取完整的文本文件

时间:2017-04-25 17:21:10

标签: c# progress-bar

我正在尝试使用运行100次的for循环来读取文本文件。

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

现在这可以正常工作,如果文本文件有100行,但不是如果让我说700.所以我希望循环运行100次,但在每次运行中读取文件的“1%”。我会怎么做?

1 个答案:

答案 0 :(得分: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)通常只读取一行 - 它基本上读入缓冲区然后解释该缓冲区。这比一次读取一个字节的效率要高得多,但它确实意味着该流的进度将超出其严格意义所需的范围。