8.ファイルのコピー
ファイルの入出力の後は、ファイルからファイルへのコピーです。
但し、読み込み書き込みの関数は前回までとは異なります。
下記の31行を打ち込み後、コンパイルしてから実行します。
実行する前に注意です。実行するディレクトリに任意の文字を記述したファイルを
indata.datとして作成しておいて下さい。
#include <stdio.h>
main()
{
FILE *fp_in;
FILE *fp_ot;
char buf[8];
fp_in = fopen("indata.dat", "r");
if (fp_in == NULL) {
printf("入力ファイルがオープン出来ません");
return;
}
fp_ot = fopen("otdata.dat", "w");
if (fp_ot == NULL) {
printf("出力ファイルがオープン出来ません");
return;
}
while (1) {
fread(buf, 1, 1, fp_in);
if (feof(fp_in) != NULL) break;
if (ferror(fp_in) != NULL) {
printf("入力ファイルのリードでエラーです");
return;
}
fwrite(buf, 1, 1, fp_ot);
if (ferror(fp_ot) != NULL) {
printf("出力ファイルのライトでエラーです");
return;
}
}
fclose(fp_in);
fclose(fp_ot);
}
いかがですか?
ファイルに正しく出力されましたか?
今回の学習項目
1)fread
fgetsでは読み込みデータをテキストとして扱い、改行まで読み込むと
いう仕様になっていますが、freadではバイナリーデータでも読み込む
事ができます。
これによりテキストではない制御コードが入ったファイルでも問題なく読み
込む事ができるのです。
もちろんテキストファイルも大丈夫です。
2)fwrite
こちらもfputsに対してバイナリーデータも扱えるfwriteにしま
した。