FileStream.BeginRead()的Out of Bounds异常

时间:2013-10-09 23:17:41

标签: c# filestream

因此,我构建了一个小应用程序来打开并监视文件以进行更改,并将它们显示为窗体。

我遇到了一个问题但无论何时更新文件,它都会在我第一次加载文件时正常工作。

这是我正在使用的代码段,它告诉我:

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);

有没有人遇到过这个?

1 个答案:

答案 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);
        }
    }