我正在尝试使用运行100次的for循环来读取文本文件。
StreamReader reader = new StreamReader("client.txt");
for (int i=0;i<=100;i++)
{
reader.readline();
}
现在这可以正常工作,如果文本文件有100行,但不是如果让我说700.所以我希望循环运行100次,但在每次运行中读取文件的“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
)通常只读取一行 - 它基本上读入缓冲区然后解释该缓冲区。这比一次读取一个字节的效率要高得多,但它确实意味着该流的进度将超出其严格意义所需的范围。