В настоящее время я занят проектом, в котором мне нужно скопировать деталь из файла в другой файл, поэтому я сделал код для этого, используя fread и fwrite. Но я столкнулся с проблемой: для целей тестирования я создал код, который должен копировать весь файл, но каким-то образом код создает копии, которые больше исходного файла. Смотрите код, который я сделал ниже
FILE *base_file;
FILE *new_file;
fpos_t curpos;
int tmp;
// Open the base file
fopen_s(&base_file, "C:/base.dat", "rb");
// Open the file which should contain the copy
fopen_s(&new_file, "C:/new.dat", "w");
// Get the filesize
fseek(base_file, 0, SEEK_END);
fgetpos(base_file, &curpos);
fseek(base_file, 0, SEEK_SET);
//Read and copy (it seems to go wrong here)
for(int i = 0; i < curpos; i++){
fread (&tmp, 1, 1, base_file);
fwrite(&tmp, 1, 1, new_file);
}
fclose(base_file);
fclose(new_file);
Базовый файл составляет 525 КБ, а новый файл - 527 КБ. Насколько я мог видеть, части, где возникает эта проблема, следуют за частями, в которых есть 7 нуль-байтов, и копия как-то добавила «0D» (в шестнадцатеричном формате) после этих частей. В ascii символ «0D» - это «возврат каретки». Мне было интересно, что может быть причиной того, что мой код копии добавляет возврат каретки в файл? Насколько я знаю, этот скрипт должен просто работать, поскольку я просто читаю базовый файл и напрямую копирую его в новый файл, а базовый файл не содержит этих возвратов каретки.