2011-09-26 2 views
0

데이터베이스에서 검색 한 데이터를 사용하여 탭으로 구분 된 파일을 만들려고합니다. MemoryStream을 사용하여 StreamWriter를 만들고이를 쓰는 방법은 제대로 작동하는 것 같습니다. "while (rdr.Read())"루프는 약 40 번 실행됩니다. 그러나 MemoryStream을 FileStream으로 변환하는 방법으로 가면 탭으로 구분 된 결과 파일은 34 행만 표시되고 34 행은 완료되지 않습니다. 뭔가가 출력을 제한하고 있습니다. 갑자기 종료되는 데이터 자체에 문제가있는 것을 보지 마십시오.MemoryStream을 FileStream으로 변환 할 때 FileStream 데이터가 불완전합니다.

여기 변환 방법입니다 :

protected internal static void ConvertMemoryStreamToFileStream(MemoryStream ms, String newFilePath){ 
     using (FileStream fs = File.OpenWrite(newFilePath)){ 
      const int blockSize = 1024; 
      var buffer = new byte[blockSize]; 
      int numBytes; 
      ms.Seek(0, SeekOrigin.Begin); 
      while ((numBytes = ms.Read(buffer, 0, blockSize)) > 0){ 
       fs.Write(buffer, 0, numBytes); 
      } 
     } 
    } 

모든 모든 도움을 감사합니다, 감사합니다.

답변

1

아무도 도움이되지 않으므로 해결책을 직접 찾았습니다. :(

MemoryStream을에 데이터를 기록하는 방법에있어서

, 당신은 (StreamWriter를가 StreamWriter를이 MemoryStream을 쓰고있는) FileStream 객체로 선회하는 방법을 시작하기 전에 아주 끝이를 추가해야합니다

..
streamWriter.Flush(); 

은 분명히이 모든

+1

당신은 언어 태그를 추가하는 것을 잊었습니다 - C# ?. 아무도이 문제를 보지 못한 것처럼 보입니다. – oers

0

이 만약 메모리로 작업하는 것은 짜증 뜻에 상관없이 스트림에 데이터를 "버퍼"를 추가 새 Stream.CopyTo 인터페이스를 사용할 수 있습니다 4.0 닷넷을 사용하고 있습니다 :

ms.Seek(0, SeekOrigin.Begin); 
using (var output = File.OpenWrite(newFilePath)) 
{ 
    ms.CopyTo(output); 
} 

output이 처리되면 데이터가 삭제됩니다.