0

c# を使用してバイナリ ファイルを作成しました: 使用したコードは次のとおりです。

     try            
         {
            Console.WriteLine("Binary Writer");

       using (BinaryWriter b = new BinaryWriter(File.Open("C:\\file.bin",FileMode.Create)))
            {  
                b.Write("world");
                b.Write("god");
                b.Write("its cool");
                b.Write("1000");
                b.Flush();
            }

        }
        catch (IOException ioexp)
        {
            Console.WriteLine("Error: {0}", ioexp.Message);
        }
    }

私が見た出力ファイルには-

世界(SOMETHING HERE)神(SOMETHING HERE)クール(SOMETHING HERE)1000

バイナリ形式である必要はありませんか?

4

3 に答える 3

3

最も単純な値の型は、簡単にバイナリに変換できます。それらには、その値を表すことができる固定バイト数があります。バイト型の変数と同様に、1 バイトとして記述できます。int は 4 バイトで記述できます。10 進数は 16 バイトとして記述できます。など。

しかし、文字列は扱いが難しく、可変長にすることができます。そのため、BinaryWriter は、ファイルから文字列を再度読み取ることができるようにするために、特別な処理を行う必要があります。これは、ファイルに表示される (SOMETHING HERE) です。文字列の長さを格納します。文字列内の文字が続きます。

これで、BinaryReader が文字列を簡単に読み取ることができるようになりました。最初に長さを読み取り、次に読み取る文字数を認識します。

これは、BinaryReader でしかファイルを読み戻せないことも意味することに注意してください。これは、別のプログラムが読み取ることになっているファイルを作成するときに問題になる傾向があります。つまり、Write(string) メソッドを決して使用しないでください。通常、代わりに Write(byte[]) を使用します。そのバイト[]を生成するには、適切なエンコーディングを使用してください。

于 2013-08-24T14:32:46.423 に答える
1

テキストは魔法のように、バイナリ ファイルに出力されて異なって表示されることはありません。テキストは、インスタンスで指定したエンコーディングで保存されBinaryWriterます。あなたの場合、指定されていないため、 BinaryWriter の MSDN ページによると、デフォルトで UTF-8 になります。

各文字列の間に表示されるのは、UTF-7 でエンコードされた符号なし整数として各文字列の前に付けられた長さです。その数値は「バイナリ」形式であるため、その値の UTF-8 表現として表示されます。

16 進エディタでファイルを開いてみてください。BinaryWriter によって文字列がどのように書き込まれるかを正確に確認できます。

于 2013-08-24T14:16:21.107 に答える
0

実際には、ファイルはバイナリ形式です。すべてのファイルはバイナリ形式です。テキスト ファイルとデータ ファイルの違いは、テキスト ファイルでは、各バイトがその char 表現に直接マップされることです。代わりに、ここに表示されているのは、そのファイルに書き込んだ各情報に対して、その情報をエンコードするために使用される別のものがあるということです。

于 2013-08-24T14:16:06.413 に答える