2012-04-24 5 views
0

을 쓰고이를 위해 내가 binWriter.Writer (이름) 파일을 사용하는 경우다른 출력, 내가 바이너리 파일을 생성하고 파일

namespace BinaryStream 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string filename = @"c:\happybirthday.txt"; 
      using (BinaryWriter binWriter = 
    new BinaryWriter(File.Open(filename, FileMode.Create))) 
      { 
       string name = "Sachin"; 
       string wishes = "happy birthday"; 

       binWriter.Write(name.ToCharArray()); 
       binWriter.Write(wishes.ToCharArray()); 
      } 



     } 
    } 
} 

를 사용하고 일부 특수 문자가 포함되어 있습니다. 하지만 문자열을 chararray로 변환하고 파일에 쓰면 파일에 일반 텍스트가 포함됩니다 (특수 문자는 포함하지 않습니다).

이유가 무엇입니까?

+1

하나는 바이너리를 작성하고 다른 하나는 일반 텍스트를 작성하는 장황한 방법입니까? 왜이 경우에 이진 작가를 사용하고 있습니까? – yamen

+0

파일은 두 부분으로되어 있습니다. 1. header - 사람이 읽을 수있는 형식의 데이터를 포함하고 other는 이진 데이터가 들어있는 본문을 포함합니다. 의도는 이것을 할 수있는 한 작가를 사용하는 것입니다. 가능한 경우 대안을 제안 할 수 있습니까? – Raghav55

+0

[System.IO.BinaryWriter를 사용하여 문자 배열과 문자 배열의 차이] 가능한 중복 (http://stackoverflow.com/questions/1014727/difference-in-writing-string-vs-char-array-with-system) -io-binarywriter) –

답변

2

Write(string) 과부하 길이 접두어 :

여기에서 : http://msdn.microsoft.com/en-us/library/yzxa6408.aspx

길이 프리픽스 문자열 할 문자열의 길이를 포함하는 단일 바이트 또는 단어 접두어하여 문자열 길이를 나타낸다 그 문자열. 이 메서드는 먼저 문자열의 길이를 UTF-7 인코딩 된 부호없는 정수로 쓴 다음 BinaryWriter 인스턴스의 현재 인코딩을 사용하여 스트림에 해당 문자를 씁니다.

반면에 Write(char[])은 그렇지 않습니다. 이 추가 정보는 텍스트보기로 열면 이상한 데이터로 표시됩니다.

이유는 읽기 동작을 볼 때 분명합니다. BinaryReader.ReadChars은 읽어야 할 문자 수를 말해야하며, 길이 접두사를보고 BinaryReader.ReadString을 읽는 것이 좋습니다.

편집 : 가능한 복제, 어쨌든 추가 정보 : Difference in writing string vs. char array with System.IO.BinaryWriter

1

BinaryWriter.Write (문자열)는 먼저 길이를 기록하고 파일에 문자열을 씁니다. 그래서 그 문자열의 길이를 가리키는 특수 문자를 파일에서 찾았습니다. 이 함수

MSDN 설명 :

길이 프리픽스 문자열은 문자열이 문자열의 길이를 포함하는 단일 바이트 또는 단어 접두어하여 문자열 길이를 나타낸다. 이 메서드는 먼저 문자열의 길이를 UTF-7로 인코딩 된 부호없는 정수로 쓴 다음 BinaryWriter 인스턴스의 현재 인코딩을 사용하여 해당 문자를 스트림에 씁니다.