我从文件中得到一个随机行:
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));
}
}
但有时事实证明,这条线总是空的,而循环是无限的。请问,我哪里错了?
此函数被调用 1000 次(例如)。前100次调用成功,但随后主流的位置是最后一个位置,seek没用。
ps:我想在文件中获得一个随机位置。然后通读该位置所在的行到末尾,并作为结果返回下一行。循环获取大文件的随机字符串是最快的算法。是的,我知道这个函数永远不会返回第一行。