2016-11-24 9 views
-1

여기에 뭔가 분명한 점이있을 수 있지만 FileStream에서 인코딩을 설정할 수없는 것으로 보입니다. 다음은 코드입니다.C# FileStream 읽기 세트 인코딩

FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read); 
      using (fs) 
      { 

       byte[] buffer = new byte[chunk]; 
       fs.Seek(chunk, SeekOrigin.Begin); 
       int bytesRead = fs.Read(buffer, 0, chunk); 
       while (bytesRead > 0) 
       { 
        ProcessChunk(buffer, bytesRead, database, id); 
        bytesRead = fs.Read(buffer, 0, chunk); 
       } 

      } 
      fs.Close(); 

여기서 ProcessChunk는 읽은 값을 XML로 직렬화되지만 읽은 문자가 잘못 표시되는 객체에 저장합니다. 인코딩은 1250이어야합니다. FileStream에 인코딩을 추가하는 옵션을 보지 못했습니다. 내가 여기서 무엇을 놓치고 있니?

+0

'''FileStream'' 대신'''StreamWriter'''를 사용하십시오. – tym32167

+1

* bytes *를 읽고 있으므로 인코딩이 없습니다. 이러한 바이트가 텍스트를 구성하는 경우 해당 바이트를 텍스트로 변환하여 인코더가 필요한 프로세스입니다. 코드 또는 질문 ("어디에서 엔코더를 지정합니까?"제외)에서 텍스트 처리 흔적이 없으므로 질문은 다음과 같습니다. 엔코더가 필요합니까? –

답변

1

FileStream 대신 StreamReader를 사용하십시오. 인코딩을 지정하는 데 사용할 수있는 여러 개의 숫자가 constructors입니다.

StreamReader srAsciiFromFile = new StreamReader(file, System.Text.Encoding.ASCII); 

가 나는 또한으로 작성 제안 : 예를 들어

using (StreamReader fs = new StreamReader ...etc) 

보다는 사용하여 외부 변수를 선언; the Dispose will handle that부터 사용하지 않고 닫기를 수행 할 필요가 없습니다.

+0

Streamreader를 사용하여 청크 크기를 어떻게 지정합니까? 파일의 지정된 시작 지점에서 시작하여 한 번에 하나씩 정의 된 크기의 청크를 읽어야하므로 FileStream을 사용해야합니다. – Flopn

+0

StreamReader에 해당하는 '읽기'방법이 있습니다. https://msdn.microsoft.com/en-us/library/9kstw824(v=vs.110).aspx; 이제 인코딩이 해결되었으므로 "바이트"대신 "char"문자를 사용합니다. – Richardissimo