C言語でバイナリもテキストも読み書きする方法

概要

  • Cを使うと、バイナリファイルもテキストファイルも同じやり方で読み書きできる
  • ファイルの中身を1バイトづつchar型の変数にコピーして用いれば良い
  • 引数に指定したファイルの中身を、もう一つのファイルの中に書き込むプログラムを作成
  • ファイルがバイナリでもテキストでも関係なく実行できる

具体例

./a.out photo.png text.txt

と実行するとtext.txtの中身がphoto.pngに書き換わる(テキストファイルが画像ファイルになる)

プログラム

/*
バイナリであれテキストであれ引数に指定したファイルをコピー
ferror()を用いてエラー検査を行う
*/

#include<stdio.h>
#include<stdlib.h>

int main(int argc,char *argv[])
{
    FILE *from,*to;
    char ch;

    if((from = fopen(argv[1],"rb"))==NULL)
    {
        printf("コピー元ファイルを開けません\n");
        exit(1);
    }

    if((to = fopen(argv[2],"wb"))==NULL)
    {
        printf("コピー先ファイルを開けません\n");
        exit(1);
    }

    while(!feof(from))
    {
        ch = fgetc(from);
        if(ferror(from))
        {
            printf("コピー元ファイルの読み込みエラー\n");
            exit(1);
        }

        if(!feof(from)) fputc(ch,to);
           
        if(ferror(to))
        {
            printf("コピー先ファイルの書き込みエラー\n");
            exit(1);
        }
    }

    fclose(from);
    fclose(to);

    return 0;
}