因此,我构建了一个小应用程序来打开并监视文件以进行更改,并将它们显示为窗体。
我遇到了一个问题但无论何时更新文件,它都会在我第一次加载文件时正常工作。
这是我正在使用的代码段,它告诉我:
Offset and length were out of bounds for the array or count is greater than the number of elements from index to
the end of the source collection.
我不确定这个逻辑究竟出了什么问题,因为它应该可以正常工作。第一次加载时m_lastFilePosition设置为0,并创建一个预期大小的字节数组。
m_readingFile = true;
FileStream l_stream = new FileStream(m_fileToWatch, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
FileInfo l_info = new FileInfo(m_fileToWatch);
buffer = new byte[l_info.Length-m_lastFilePosition];
l_stream.BeginRead(buffer,
(int)m_lastFilePosition,
(int)(l_info.Length - m_lastFilePosition),
new AsyncCallback(FileReadCallback),
l_stream);
有没有人遇到过这个?
答案 0 :(得分:0)
我将其中的一部分归功于Hans Passant,因为他帮助我指明了正确的方向。
基本上我把之前发布的代码更改为l_stream.Seek(m_lastFilePosition,SeekOrigin.Begin);然后将偏移量更改为0,这解决了我的问题。
就是这样,解决它。
m_readingFile = true;
l_stream = new FileStream(m_fileToWatch, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
FileInfo l_info = new FileInfo(m_fileToWatch);
if (m_lastFilePosition < l_info.Length)
{
buffer = new byte[l_info.Length - m_lastFilePosition];
l_stream.Seek(m_lastFilePosition, SeekOrigin.Begin);
IAsyncResult result = l_stream.BeginRead(buffer,
0,
(int)(l_info.Length - m_lastFilePosition),
new AsyncCallback(FileReadCallback),
l_stream);
}
}