0

3KB 程度のファイルの内容をバッファに読み込んでから、バッファの内容を別のファイルに書き込もうとしています。データが書き込まれるファイルには、書き込まれるデータの一部のみが含まれます。そのサイズは約1KBです。残りのデータを書き込むには?

fp1 = fopen("a.txt","rb");
fp2 = fopen("b.txt","wb");

fread(buffer, 1, BUFFER_SIZE,fp1);//reading from file pointed to by fp1
//BUFFER_SIZE = 3KB
fwrite(buffer, 1, BUFFER_SIZE, fp2);//writing into a file pointed to by fp2

fwrite 後の fflush は私のためにそれを行いますか?

4

2 に答える 2

3

fflush(fp2)またはfclose(fp2)、保留中のバッファリングされたバイトをディスクに移動します。

于 2012-04-13T05:51:53.913 に答える
0

あなたが要求したすべてのバイトをあなたに与えるという保証はありません。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;
}
于 2012-04-13T05:55:11.773 に答える