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 に答える