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にしま
     した。