2012-07-18 5 views
0

큰 바이너리 파일을 작성하는 프로그램이 있습니다. 그리고이 문제를 충족 :.BinaryWriter로 큰 파일을 작성하는 방법

static void Main(string[] args) 
{ 
    for (int j = 0; j < 100; j++) 
    { 
     string fileName = @"D:\Users\nimci\Desktop\buf\"+j+".bin"; 
     using (var output = 
      new BinaryWriter(File.Open(fileName, FileMode.Create, FileAccess.Write))) 
     { 
      for (int i = 0; i < 4000000; i++) 
      { 
       output.Write(i); 
       //if(i%1000==0) Thread.Sleep(1); 
      } 
     } 
    } 
} 

그리고 :. 파일 작성에 가끔 내 programm에 충돌을 실행하지 않는 오류 (블록 캐치를 던지는없이 나는 이런 식으로 뭔가를해야만이 문제를 발견하고 해결하기 위해 몇 가지 테스트 콘솔 응용 프로그램을 작성 일부 파일의 크기는 0, 예를 들어 숫자가 8, 10, 15, 17 인 파일이 있습니다 ...

내 집에서는 (덜 강력한) 모든 파일이 제대로 작성되었습니다. 내 작업 컴퓨터 중 일부는 0 크기가 있습니다. Thread.Sleep (1)을 주석 처리하지 않으면 (또는 다른 방식으로 프로그램이 느려지는 경우) 내 작업 컴퓨터에서도 모든 파일이 올바르지 만 이러한 "수정 사항"은 내 컴퓨터에서 작동하지 않습니다. 서버 컴퓨터. 아무도 설명 할 수 있습니까? 오류가 발생했는데 어떻게 해결할 수 있습니까? try-cath-finally를 대신 사용하려고 시도하지만 catch 블록은이 오류를 catch하지 않습니다.

+1

이 문제가되지해야하지만, 당신이 확인할 수 있습니다 귀하의 사용 블록의 마지막 줄에 output.Close()가 도움이되지 않습니다? – DarkSquirrel42

+1

복제 할 수 없습니다. 음,'using'은 닫음 처리를 처리해야하므로 주석으로 작성하지만 내부 루프 뒤에 output.Flush();를 삽입하려고합니다. – Steve

+0

output.Flush(); 도움이되지 않았다. 여전히 0 크기 파일. –

답변

0

를 추가해보십시오 세척 :

 for (int i = 0; i < 4000000; i++)   
     {   
      output.Write(i);   
      //if(i%1000==0) Thread.Sleep(1);   
     } 
     output.Flush(); 
+0

ReadAllBytes 및 WriteAllBytes가 네트워크의 대용량 파일 * 특히 *에서 제대로 동작하지 않아도됩니다. – hometoast

+0

내 프로그램에서 이진 파일에 배열을 저장해야합니다. 이진 작성기에는 write (int) 메서드가 있습니다. 이 메소드는 int 값의 바이트를 처리하여 스트림에 씁니다. Byt 왜 내가 0 크기의 파일을 참석? –

+0

@hometoast - 네, 저도 그 사실을 깨달았습니다. –

관련 문제