// バイナリファイルの読み書きサンプル // 1.バイナリファイルを読み込み // 2.ダンプ風に標準出力に出力 // 3.バイナリファイルとしてそのまま別のファイルに出力 // ポイント1.ファイルをオープンする時のオプションはrb wbとbを付けます // ポイント2.freadで読み込みます。 // パラメータは1.読込バッファ 2.読み込むサイズ 3.読み込む個数 4.ファイルポインタ // サンプルはchar型(1byte)を512個の指定です。 // ポイント3.fwriteで書き込みます。 // パラメータは1.バッファのポインタ 2.書き込むサイズ 3.書き込む個数 4.ファイルポインタ // 書き込みの個数は、読み込んだバイト数をそのまま使います。 #include #include int main(void) { // ファイルポインタ FILE *fpr, *fpw; // 読込サイズを保存する変数 int s; // ループカウンタ int i; // 読込バッファ char buff[512]; // ※8の倍数にしないとダンプ風出力が面倒かも // ダンプ風標準出力用 char str[17] = "0123456789ABCDEF"; // ポイント1.ファイルをオープンする時のオプションはrb wbとbを付ける fpr = fopen("logo3w.png", "rb"); fpw = fopen("copy.png", "wb"); if (fpr == NULL ) { puts("ファイルがないよ!"); return EXIT_FAILURE; } // ポイント2.freadで読み込みます。 // パラメータは1.読込バッファ 2.読み込むサイズ 3.読み込む個数 4.ファイルポインタ // サンプルはchar型(1byte)を512個の指定です。 while ((s = fread(buff, sizeof(char), sizeof(buff), fpr)) != 0) { // 2.ダンプ風に標準出力に出力 for (i = 0; i < s; i++) { // 上位4ビットをcharの0〜Fに変換 printf("%c", str[buff[i] / 16 & 15]); // 下位4ビットをcharの0〜Fに変換 printf("%c ", str[buff[i] & 15]); if (i % 8 == 7) { // 8バイト毎に改行 printf("\n"); } } // ポイント3.fwriteで書き込みます。 // パラメータは1.バッファのポインタ 2.書き込むサイズ 3.書き込む個数 4.ファイルポインタ // 書き込みの個数は、読み込んだバイト数をそのまま使います。 // 3.バイナリファイルとしてそのまま別のファイルに出力 fwrite(buff, sizeof(char), s, fpw); } // ファイルクローズ fclose(fpr); fclose(fpw); return EXIT_SUCCESS; }