#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