0

I am creating a binary file, for this I am using

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());
            }



        }
    }
}

if binWriter.Writer(name) is used the file contains some special characters. But if i convert the string to chararray and write to file , the file contains the normal text(without any special characters).

What is the reason behind this?

4

2 に答える 2

2

オーバーWrite(string)ロードには長さがプレフィックスされます。

ここから: http://msdn.microsoft.com/en-us/library/yzxa6408.aspx

長さがプレフィックスされた文字列は、その文字列の長さを含む単一のバイトまたは単語を文字列にプレフィックスとして付けることによって、文字列の長さを表します。このメソッドは、最初に文字列の長さを UTF-7 でエンコードされた符号なし整数として書き込み、次に BinaryWriter インスタンスの現在のエンコーディングを使用して、その数の文字をストリームに書き込みます。

一方Write(char[])、そうではありません。その余分な情報は、テキスト表示で開くと奇妙なデータとして表示されます。

この理由は、読み取り動作を見れば明らかです。長さのプレフィックスを見て解決しBinaryReader.ReadCharsながら、読み取る文字数を指定する必要があります。BinaryReader.ReadString

編集:重複の可能性、とにかく追加情報: System.IO.BinaryWriter を使用した文字列と文字配列の書き込みの違い

于 2012-04-24T11:49:57.610 に答える
1

BinaryWriter.Write(string)は最初の長さを書き込み、次に文字列をファイルに書き込みます。そのため、その文字列の長さを指しているファイル内の特別な文字が見つかりました。

この関数のMSDNの説明:

長さ接頭辞付きの文字列は、その文字列の長さを含む1バイトまたは単語を文字列の前に付けることにより、文字列の長さを表します。このメソッドは、最初に文字列の長さをUTF-7でエンコードされた符号なし整数として書き込み、次にBinaryWriterインスタンスの現在のエンコードを使用してその数の文字をストリームに書き込みます。

于 2012-04-24T12:16:31.903 に答える