2014-01-06 2 views
0

내가 여기서 잘못하고있는 것을 모른다. 내 코드는 첫 번째 패스에서 예상대로 작동하지만 두 번째 패스에서는 실행되지 않고 "읽기가 버퍼 오버런을 일으킬 것"이라는 예외가 발생합니다.읽기가 버퍼 오버런 오류

버퍼가 잘못되어 있습니다. 내가 덮어 쓰는 것처럼?

나는

using (Stream stream = new FileStream(path, FileMode.Open, FileAccess.Read)) 
{ 
    byte[] buffer = new byte[1024]; 

    int bytesRead = 0; 
    long bytesToRead = stream.Length; 

    while (bytesToRead > 0) 
    {    
     int n = stream.Read (buffer, bytesRead, 1024); 
     if (n == 0) break; 

     //do work on buffer... 

     bytesRead += n; 
     bytesToRead -= n; 
    } 
} 

닷넷 2.0 모노에서 작업 .. 본질적으로 동일한 코드를 가지고 있었고 MSDN 예제하지만 기쁨을 일치하도록 변경되었습니다.

+1

bytesRead 변수는 0으로 유지되어야한다고 생각합니다. 파일이 아니라 버퍼로 오프셋됩니다. –

답변

3

Stream.Read - 두 번째 매개 변수는 버퍼에서 오프셋되며 사용자의 경우 0이어야합니다.

0

읽기 매개 변수는 버퍼 정보를위한 것입니다. 버퍼에서 데이터를 오프셋 + nLength 오프셋에 저장합니다. 파일 세트를 앞당길 수 있습니다. stream.Position = bytesRead;

관련 문제