我为读取每秒多次附加并且位于网络共享中的文件而实现的类有这个奇怪的问题。在第一次迭代期间,一切都很好,在阅读结束时,我保留了数据库中的最后一个位置。然而,在第二遍期间,文件流不会“看到”附加文件的实际大小,但它会记住之前的大小。
难道是我从网络共享中读取的事实吗?预先感谢您的反馈。
public long? ReadFromFile(string Path, long lastposition, int ClusterId, Startup ST)
{
QuickFix.FieldMap QFM = new QuickFix.FieldMap();
FileStream fs =new FileStream(Path, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite,1024,true);
StreamReader sr = new StreamReader(fs);
long CurrentPosition = lastposition;
sr.BaseStream.Seek(lastposition, SeekOrigin.Begin);
string line;
long i = 0;
while ((!sr.EndOfStream))
{
line = sr.ReadLine();
CurrentPosition = CurrentPosition + System.Text.ASCIIEncoding.ASCII.GetByteCount(line) + 1;
}
lastposition = CurrentPosition;
sr.Close();
sr.Dispose();
fs.Flush();
fs.Close();
fs.Dispose();
return lastposition;
}
第一次通过总是成功的。第二遍不通过循环 b/c 我移动指针的最后位置保持不变,即使实际文件已经长大。
更新:该文件位于 solaris 服务器中。