3

バイナリモードとテキストモードはどのように使い分けますか
どのような違いがありますか

http://www7b.biglobe.ne.jp/~robe/cpphtml/ この説明で納得できませんでした。

sayuri
  • 42,863
  • 1
  • 33
  • 94
tmt
  • 47
  • 1
  • 2
  • 3
    当該ページの何章、どの文に納得できなかったのかを提示しないと具体的な説明ができません。 – sayuri Aug 01 '15 at 21:17

2 Answers2

9

テキストモードをどう定義するかはOS依存です。例えばUNIXの場合テキストモードはバイナリモードと同じとされるため特にモードの切り替えを必要としていません。
Windowsのテキストモードの場合、ファイルに保存する際に改行コードを \r\n(CR LF)の2バイトを使って表現します。しかしCプログラム上では \n(NL)の1バイトを使うために読み書きを行う際に変換が必要になります。この変換は

FILE* fp;
fprintf(fp, "\n");    // "\r\n"に変換される

のように行指向の分かりやすいものだけでなく、freadfwriteといったバイナリを扱う関数においても機械的に変換されます。

sayuri
  • 42,863
  • 1
  • 33
  • 94
3

バイナリモードとは読み書きしたいファイルに書いてある内容を1バイトたりとも変更せずに取り扱いたい場合に使い、
テキストモードとはソースコードを異プラットフォームで共通に使いたい場合に使います。

プラットフォーム(実行処理系)にとって適切な「テキストファイル中の改行コード」は異なります。
改行の、\nと\r\nの違いは何ですか?
テキストモードを使うと、この「適切な改行コード」が自動的に選ばれます。
テキストモードでは ソース中の \n 記述と「適切な改行コード」が常に相互変換されます。

バイナリモードではソースファイル中の \n を、データファイル中の `\x0A' とします。
つまり値を(勝手に)変換しません。結果的にデータファイルをそのまま読み書きできます。

774RR
  • 21,855
  • 19
  • 44