2016-05-07 6 views
-1

Я пытаюсь создать функцию, которая открывает 2 файла - один для чтения, а другой для записи, а затем копирует первый файл в другой двоичный файл и по какой-то причине его просто не работает. Я пытался отлаживать программу несколько раз, но я не мог распознать проблему.Скопируйте содержимое файла 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

Что делать, если это файл размером 800 ГБ? Возможно, неплохо было бы попытаться прочитать все это в памяти ... –

+0

Как вы называете эту рутину? – usr2564301

ответ

3

Один примечание стороны, прежде, чем открывать заново dstFile для записи вы должны закрыть предыдущий дескриптор.

В любом случае, вы позвонили fseek(srcFile, 0, SEEK_END);, однако вы не искали его в начале, поэтому, когда вы пытаетесь прочитать, вы нажмете EOF. Я предполагаю, что это корень вашей проблемы, если нет (или, вернее, после ее исправления она по-прежнему не работает), пожалуйста, дайте более подробную информацию о том, как она не работает.