fork(3) download
  1. // バイナリファイルの読み書きサンプル
  2. // 1.バイナリファイルを読み込み
  3. // 2.ダンプ風に標準出力に出力
  4. // 3.バイナリファイルとしてそのまま別のファイルに出力
  5.  
  6. // ポイント1.ファイルをオープンする時のオプションはrb wbとbを付けます
  7.  
  8. // ポイント2.freadで読み込みます。
  9. // パラメータは1.読込バッファ 2.読み込むサイズ 3.読み込む個数 4.ファイルポインタ
  10. // サンプルはchar型(1byte)を512個の指定です。
  11.  
  12. // ポイント3.fwriteで書き込みます。
  13. // パラメータは1.バッファのポインタ 2.書き込むサイズ 3.書き込む個数 4.ファイルポインタ
  14. // 書き込みの個数は、読み込んだバイト数をそのまま使います。
  15. #include <stdio.h>
  16. #include <stdlib.h>
  17.  
  18. int main(void) {
  19. // ファイルポインタ
  20. FILE *fpr, *fpw;
  21. // 読込サイズを保存する変数
  22. int s;
  23. // ループカウンタ
  24. int i;
  25.  
  26. // 読込バッファ
  27. char buff[512]; // ※8の倍数にしないとダンプ風出力が面倒かも
  28.  
  29. // ダンプ風標準出力用
  30. char str[17] = "0123456789ABCDEF";
  31.  
  32. // ポイント1.ファイルをオープンする時のオプションはrb wbとbを付ける
  33. fpr = fopen("logo3w.png", "rb");
  34. fpw = fopen("copy.png", "wb");
  35. if (fpr == NULL ) {
  36. puts("ファイルがないよ!");
  37. return EXIT_FAILURE;
  38. }
  39.  
  40. // ポイント2.freadで読み込みます。
  41. // パラメータは1.読込バッファ 2.読み込むサイズ 3.読み込む個数 4.ファイルポインタ
  42. // サンプルはchar型(1byte)を512個の指定です。
  43. while ((s = fread(buff, sizeof(char), sizeof(buff), fpr)) != 0) {
  44. // 2.ダンプ風に標準出力に出力
  45. for (i = 0; i < s; i++) {
  46. // 上位4ビットをcharの0~Fに変換
  47. printf("%c", str[buff[i] / 16 & 15]);
  48. // 下位4ビットをcharの0~Fに変換
  49. printf("%c ", str[buff[i] & 15]);
  50.  
  51. if (i % 8 == 7) {
  52. // 8バイト毎に改行
  53. printf("\n");
  54. }
  55. }
  56.  
  57. // ポイント3.fwriteで書き込みます。
  58. // パラメータは1.バッファのポインタ 2.書き込むサイズ 3.書き込む個数 4.ファイルポインタ
  59. // 書き込みの個数は、読み込んだバイト数をそのまま使います。
  60. // 3.バイナリファイルとしてそのまま別のファイルに出力
  61. fwrite(buff, sizeof(char), s, fpw);
  62. }
  63.  
  64. // ファイルクローズ
  65. fclose(fpr);
  66. fclose(fpw);
  67. return EXIT_SUCCESS;
  68. }
  69.  
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty