Копирование бинарных файлов с использованием fseek, fread и fwrite

Я пытаюсь написать функцию, которая будет перезаписывать двоичные файлы. Теперь я написал эту функцию, которая переписывает текстовые файлы, и она прекрасно работает:

void myCopy(char source_file[50], char dest_file[50])
{
    FILE *fp1, *fp2;
    char a;
    fp1 = fopen(source_file, "rt");
    if (fp1 == NULL)
    {
        printf("Can't open this file, either it doesn't exist or doesn't contain anything.\n");
    }
    fp2 = fopen(dest_file, "wt");
    if (fp2 == NULL)
    {
        printf("Can't open this file, either it doesn't exist or doesn't contain anything.\n");
    }
    while ((a = fgetc(fp1)) != EOF)//While a failure did not accure.
    {
        fputc(a, fp2);
    }
    fclose(fp1);
    fclose(fp2);
}

У меня вопрос, есть ли способ сделать то же самое для всех двоичных файлов в целом без использования fputc, fgetc, fscanf и fprintf?

1 ответ

Ваш код будет правильным для двоичных файлов, если вы удалите символ 't' из fopen строка параметров. Но вы можете использовать fread/fwrite функции и буфер для увеличения скорости копирования. Пример:

const size_t buffer_size = 8192;
char buffer[buffer_size];
while (true) {
    size_t read = fread(buffer, sizeof(char), buffer_size, fp1);

    if (read > 0)
        fwrite(buffer, sizeof(char), buffer_size, fp2);
    else
        break;
}
Другие вопросы по тегам