参考このブログでは、単純な仕上げのためのファイルの読み取りと書き込みの機能の2組。
1.fscanf()、fprintfの()フォーマットするための読み取りと書き込みのファイルへの
関数プロトタイプを
int fscanf ( FILE *fp, char * format, ... );
int fprintf ( FILE *fp, char * format, ... );
基づいて、オリジナルのscanfに()とのprintf()関数の複数のパラメータであるFILE *fp
(ファイルハンドル)。
最初のパラメータは、関数fscanf()およびscanf()アクションと、標準入力に一致する場合。
データは、型パラメータ一貫した出力を入力することが注目される書式制御文字列!
int main()
{
FILE * fp;
char c[]="Hello world!";
char buffer[20];
fp = fopen ("file.txt", "w+");
fprintf(fp,"%s",c);
rewind(fp); //定位到文件的开头。
while(!feof(fp))
{
fscanf(fp, "%s", buffer);
printf("%s ", buffer);
}
printf("%s\n", buffer);
fclose(fp);
return(0);
}
2.データ・ブロック・リード及びライト・ファイル機能:のfread()関数fwrite()関数の
関数プロトタイプ
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
size_t fwrite(void *ptr, size_t size, size_t nmemb, FILE *stream)
即ちnmemb個のデータストリームのストリームにアレイの所与のサイズからのサイズの要素を読み取るPTRによって指さ。
int main()
{
FILE *fp;
char c[] = "hello world!";
char buffer[20];
/* 打开文件用于读写 */
fp = fopen("file.txt", "w+");
/* 写入数据到文件 */
fwrite(c, strlen(c) + 1, 1, fp);
/* 查找文件的开头 */
fseek(fp, 0, SEEK_SET);
/* 读取并显示数据 */
fread(buffer, strlen(c)+1, 1, fp);
printf("%s\n", buffer);
fclose(fp);
return(0);
}
関数fscanfとfprintfの、関数freadやfwriteのデータのブロックを読んで比較すると、より速く読みください。しかし、彼らは多くの場合、サイクル回それを見つけ、しばらく(!FEOF(FP))が不正確で読んだとき、あること、欠陥があります。ファイルの終わりが残りの文字に応じて、ファイル識別子の端部が「/ 0」2バイトであるかどうかを決定することである()FEOFので、FEOF()は偽であるか、またはだけ読み出し終了場合「/」を読ん'/ 0' のときはfeof()== trueを返します。余分なサイクルを生成することになります。正確な規定を与えたデータのフォーマットのためしかし、この問題はで関数fscanfとfprintfのでは発生しません!