基になるすべてのファイルはバイトとして保存されているため、ある意味であなたの言っていることは正しいです。ただし、バイナリとして読み取ることを意図したファイルを開いてテキスト エディタで読み取ろうとすると、意味不明に見えます。
プログラムは、ファイルをテキストとして読み取るか、バイナリとして読み取るかをどのように判断しますか? (つまり、ASCII またはその他のエンコードされたバイトの特別なセットとして、または別の表現を持つ基礎となるバイトとして)?
ええと、それはわかりません - 言われたことをするだけです。
Windows では、.txt
メモ帳でファイルを開きます。メモ帳は、テキストを読み取ることを想定しています。バイナリ ファイルをメモ帳で開いてみてください。それは開き、物が見えますが、ゴミになります。
独自のプログラムを作成している場合は、すべてをバイナリとして保存する場合は、を使用して書き込み、使用BinaryWriter
して読み取ることができます。を使って書き、 を使って読むとBinaryReader
どうなるでしょうか?BinaryWriter
StringReader
特定の例に答えるには:
using (var test = new BinaryWriter(new FileStream(@"c:\test.bin", FileMode.Create)))
{
test.Write(10);
test.Write("hello world");
}
using (var test = new BinaryReader(new FileStream(@"c:\test.bin", FileMode.Open)))
{
var out1 = test.ReadInt32();
var out2 = test.ReadString();
Console.WriteLine("{0} {1}", out1, out2);
}
書かれているのと同じ順序で読む必要があるのがわかりますか? ファイルは何も教えてくれません。
次に、2 番目の部分を切り替えます。
using (var test = new BinaryReader(new FileStream(@"c:\test.bin", FileMode.Open)))
{
var out1 = test.ReadString();
var out2 = test.ReadInt32();
Console.WriteLine("{0} {1}", out1, out2);
}
あなたは意味不明になるでしょう(それがまったく機能する場合)。しかし、事前にそれを教えてくれるファイルを読み取ることができるものは何もありません。そこには特別な情報はありません。プログラムは、帯域外の情報 (ある種の仕様) に基づいて何をすべきかを認識している必要があります。