2016-05-07 16 views
-1

私は2つのファイルを開きます.1つは読み込み用で、もう1つは書き込み用に作成し、最初のファイルをもう1つのバイナリにコピーして、動作しません。私は数回プログラムをデバッグしようとしていたが、私は問題を認識できませんでした。imgファイルの内容を別のimgファイルにコピー

void myCopyBinary(char * * argv) { 
FILE * srcFile; 
FILE * dstFile; 
int yesNo = 0; 
char temp = ' '; 
int i = 0; 
int size = 0; 
char * buffer; 
int resultFread = 0; 
int resultFwrite = 0; 

srcFile = fopen(argv[1], "rb"); 

if (srcFile != NULL) { 
    dstFile = fopen(argv[2], "rb"); 
    if (dstFile != NULL) { 
    printf("Would you like to overwrite it? (Every Number -YES, 0-NO): "); 
    scanf("%d", & yesNo); 

    if (yesNo == 0) { 
     fclose(dstFile); 
     exit(0); 
     return 1; 
    } 
    } 
    dstFile = fopen(argv[2], "wb"); 

    if (dstFile != NULL) { 
    fseek(srcFile, 0, SEEK_END); // non-portable 
    size = ftell(srcFile); 
    buffer = (char *) malloc(sizeof(char) * size); 

    if (buffer == NULL) { 
     printf("Error with the buffer!\n"); 
     exit(1); 
    } 

    do { 
     resultFread = fread(buffer, 1, sizeof(buffer), srcFile); 
     resultFwrite = fwrite(buffer, 1, resultFread, dstFile); 
    } while (resultFread > 0); 
    } 

} 
+0

なぜ 'cp file1 file2'を使用しないのですか? –

+1

800GBファイルの場合はどうなりますか?全部をメモリに読み込んでみることは良い考えではないかもしれません... –

+0

どのようにこのルーチンを呼び出していますか? – usr2564301

答えて

3

もう1つの注意点として、dstFileを再度開く前に前のディスクリプタを閉じる必要があります。

とにかく、あなたはfseek(srcFile, 0, SEEK_END);と呼ばれましたが、最初に戻りたいとは考えていませんでした。したがって、あなたが読むことを試みたときにEOFとヒットしました。私はこれがあなたの問題の根源だと思っています。もしそうでなければ(あるいはこれを修正してもまだ動作しません)、それがどうしてうまくいかないかをもっと詳しく教えてください。

関連する問題