あなたが要求したすべてのバイトをあなたに与えるという保証はありません。fread
それはあなたに与えるものを少なくすることができます、それは戻りコードが何のためであるかです。
に送信する情報の量を把握するには、リターンコードを使用する必要がありますfwrite
。
また、戻りコードのチェックはfopen
呼び出しにも適用されます。オープンが機能するという保証はありません。
例として、次の完全なプログラムは、あるファイルから別のファイルに最大3Kをコピーしようとします。
#include <stdio.h>
#include <errno.h>
int main (void) {
FILE *fp1, *fp2;
char buff[3*1024];
int bytesRead;
// Open both files.
if ((fp1 = fopen ("a.txt", "r")) == NULL) {
printf ("Error %d opening a.txt\n", errno);
return 1;
}
if ((fp2 = fopen ("b.txt", "w")) == NULL) {
printf ("Error %d opening b.txt\n", errno);
fclose (fp1);
return 1;
}
// Transfer only up to buffer size.
if ((bytesRead = fread (buff, 1, sizeof (buff), fp1)) == 0) {
// Check error case.
if (ferror (fp1)) {
printf ("Error reading a.txt\n");
fclose (fp1);
fclose (fp2);
return 1;
}
}
// Attempt transfer to destination file.
if (fwrite (buff, 1, bytesRead, fp2) != bytesRead) {
printf ("Error writing b.txt\n");
fclose (fp1);
fclose (fp2);
return 1;
}
// Close all files to finish up.
fclose (fp1);
fclose (fp2);
return 0;
}