0

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

我遇到了一个问题,但是每当更新文件时,当我第一次加载文件时它工作正常。

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

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

有没有人遇到过这个?

4

1 回答 1

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);
        }
    }
于 2013-10-10T02:14:24.373 回答