#include <stdio.h> #include <stdlib.h> int main(int argc,char *argv[]) { FILE *fp; int outbf[10] = {1,2,3,4,5,6,7,8,9,10}; int inbuf[10]; int i; if (argc != 2) { printf("オープンファイル名を指定してください\n"); exit(EXIT_FAILURE); } /* バイナリ書き込み読み込みモードでファイルをオープン */ if((fp = fopen(argv[1], "wb+")) == NULL ) { printf("ファイルオープンエラー\n"); exit(EXIT_FAILURE); } /* ファイルにデータを書き込み */ fwrite(outbf, sizeof(int), 10, fp); /* ファイルの先頭に移動 */ fseek(fp, 0L, SEEK_SET); /* 書き込んだデータを読み込んでみる */ fread(inbuf, sizeof(int), 10, fp); /* ファイルクローズ */ fclose(fp); /* 読み込みデータの確認 */ for (i=0; i<10; i++) printf("%3d",inbuf[i]); printf("\n"); return 0; }【実行結果】
1 2 3 4 5 6 7 8 9 10【注意】
MS-DOSやWindowsの環境でバイナリモードで書き込んだファイルを、モードに"b"の指定をせずにテキストモードでfopenしfreadすると、'\r'にあたる0x0dのデータを正しく入力しませんので注意が必要です。モードについては、fopenのモードを参照してください。
(例)#include <stdio.h> #include <stdlib.h> int main(int argc,char *argv[]) { FILE *fp; int outbf[10] = {8,9,10,11,12,13,14,15,16,17}; int inbuf[10]; int i; if (argc != 2) { printf("オープンファイル名を指定してください\n"); exit(EXIT_FAILURE); } /* ファイルをバイナリ書き込みモードでオープン */ if((fp = fopen(argv[1], "wb")) == NULL ) { printf("ファイルオープンエラー\n"); exit(EXIT_FAILURE); } /* ファイルにデータを書き込み */ printf("fwrite :%d個データを書き込み\n", fwrite(outbf, sizeof(int), 10, fp) ); fclose(fp); for (i=0; i<10; i++) printf("%#x ",outbf[i]); printf("\n"); /* ファイルをバイナリ読み込みモードでオープン */ if((fp = fopen(argv[1], "rb")) == NULL ) { printf("ファイルオープンエラー\n"); exit(EXIT_FAILURE); } /* 書き込んだデータを読み込んでみる */ printf("バイナリモードfread :%d個データを読み込み\n", fread(inbuf, sizeof(int), 10, fp)); fclose(fp); for (i=0; i<10; i++) printf("%#x ",inbuf[i]); printf("\n"); /* ファイルをバイナリを指定せず読み込みモードでオープン */ if((fp = fopen(argv[1], "r")) == NULL ) { printf("ファイルオープンエラー\n"); exit(EXIT_FAILURE); } /* 書き込んだデータを読み込んでみる */ printf("テキストモードfread :%d個データを読み込み\n",fread(inbuf, sizeof(int), 10, fp)); fclose(fp); for (i=0; i<10; i++) printf("%#x ",inbuf[i]); printf("\n"); return 0; }(実行結果)LSIC試食版で確認
fwrite :10個データを書き込み 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10 0x11 バイナリモードfread :10個データを読み込み 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10 0x11 テキストモードfread :9個データを読み込み 0x8 0x9 0xa 0xb 0xc 0xe00 0xf00 0x1000 0x1100 0 ※緑字のように正しく入力できないことが確認できます。
▼戻る▼
「初心者のためのポイント学習C言語」 Copyright(c) 2000-2004 TOMOJI All Rights Reserved