读取文件时无限循环

时间:2013-02-14 06:55:22

标签: c# infinite-loop readfile

我从文件中得到一个随机行:

using (FileStream ifs = new FileStream(path, FileMode.Open, FileAccess.Read)) {
    using (StreamReader sr = new StreamReader(ifs, Encoding)) {
        long lastPos = ifs.Seek(0, SeekOrigin.End);
        long rndPos = 0;
          do {
              rndPos = (long)(Random.NextDouble() * lastPos);// Random is property
              ifs.Seek(rndPos, SeekOrigin.Begin);
              sr.ReadLine();
              line = sr.ReadLine();
          } while (string.IsNullOrWhiteSpace(line));
    }
}

但有时事实证明,该行总是为null,而循环是无限的。拜托,我哪里错了?

此函数被调用1000次(例如)。前100个调用成功,但是主流的位置是最后一个位置,并且寻求不起作用。

ps:我想在文件中获得一个随机位置。然后通读该位置到最后的行,并返回以下行。它是在循环中获取大文件的随机字符串的最快算法。是的,我知道这个函数永远不会返回第一行。

2 个答案:

答案 0 :(得分:0)

如果该行为null,并且您的条件为string.IsNullOrWhiteSpace(line),那么它将是一个无限循环。

答案 1 :(得分:0)

public string ReturnRandomLine(string path, ref Random r)
{
    string[] lines = File.ReadAllLines(path);
    string randomLine = String.Empty;
    int randomLineNumber;

    do
    {
        randomLineNumber = r.Next(0, lines.Length - 1);
        randomLine = lines[randomLineNumber];
    } while (String.IsNullOrWhiteSpace(randomLine));

    return @"Line #" + randomLineNumber + " " + randomLine;
}