Вы должны использовать fread
и fwrite
, используя блок за раз
FILE *fd1 = fopen("source.bmp", "r");
FILE *fd2 = fopen("destination.bmp", "w");
if(!fd1 || !fd2)
// handle open error
size_t l1;
unsigned char buffer[8192];
//Data to be read
while((l1 = fread(buffer, 1, sizeof buffer, fd1)) > 0) {
size_t l2 = fwrite(buffer, 1, l1, fd2);
if(l2 < l1) {
if(ferror(fd2))
// handle error
else
// Handle media full
}
}
fclose(fd1);
fclose(fd2);
Значительно быстрее читать в больших блоках, а fread / fwrite обрабатывает только двоичные данные, поэтому нет проблем с \ n, который может преобразоваться в \ r \ n в выходных данных (в Windows и DOS) или \ r (в (старые) MAC)