10-4 テキストモードとバイナリモードの違い

この記事は約3分で読めます。

モード”w”でファイルを開き、文字を書き込みます。10回改行しました。

#include <stdio.h>
#include <stdlib.h>
int main(void){
	char *fname="test.txt";
	int i;
	FILE *fp;
	fp=fopen(fname,"w");
	if (fp==NULL){
		puts("ファイルを開けません。");
		return -1;
	}
	for (i=0;i<10;i++) fprintf(fp,"Hello%d\n",i);
	fclose(fp);
	return 0;
}

実行結果 test.txtファイルが生成

このプログラムを実行するとtest.txtというファイルが生成されます。筆者の環境では80バイトでした。メモ帳で開くと右下にWindows(CRLF)と書かれています。

次に、バイナリモードでファイルを開くプログラムに書き換えます。

#include <stdio.h>
#include <stdlib.h>
int main(void){
	char *fname="test.txt";
	int i;
	FILE *fp;
	fp=fopen(fname,"wb");
	if (fp==NULL){
		puts("ファイルを開けません。");
		return -1;
	}
	for (i=0;i<10;i++) fprintf(fp,"Hello%d\n",i);
	fclose(fp);
	return 0;
}

実行結果 test.txtファイルが生成

このプログラムを実行するとtest.txtというファイルが生成されます。筆者の環境では70バイトでした。メモ帳で開くと右下にUnix(LF)と書かれています。

このように、テキストファイルをして開いた場合とバイナリファイルとして開いた場合で、書き込まれるデータが異なります。これは、文字コードの扱い方の違いによるものです。

‘\n’はLF(Line Feed:新しい行)を意味し、

‘\r’はCR(Carriage Return:行の先頭)を意味します。

WindowsではCRLFが、MacOS,UnixではLFが改行を表します。

テキストファイルとして開いたファイルに、’\n’を書き込むと、自動的にWindowsでの改行コード’\r\n’が書き込まれます。それに対して、バイナリファイルとして開いたファイルに’\n’を書き込むと、そのまま’\n’が書き込まれます。

これが、テキストファイルモードとバイナリファイルモードの違いです。

まとめ

fopen関数の第二引数を変更することによって、テキストファイルモードまたはバイナリファイルモードで開くことができる。

これらの違いは、改行コードをファイルに合うように自動的に変換するかどうかにあります。

コメント

タイトルとURLをコピーしました