Я создаю программу архива в C, и я хочу, чтобы она сохраняла файлы, которые я предоставляю, перечисляю и извлекаю их.
У меня было много проблем, потому что я использовал текстовый файл для сохранения, и это не лучший выбор, если я хочу обрабатывать двоичные файлы, такие как музыка или фотографии, потому что, когда я их извлекаю, они выполняются неправильно (они повреждены) , Чтобы решить эту проблему, мне захотелось создать двоичный файл архива.Могу ли я использовать fgetc() или fputc() в двоичном файле?
Код для записи файла (по добыче) заключается в следующем:
void scriviFile(const char * arrivo) //scrive i file creati in precedenza
{
FILE * partenza;
FILE * target;
int c;
int spazio = 'a';
int i = 0;
int pos;
char * path;
path = collegaSlash(getcwd(NULL, 0), nome);
partenza = fopen(path, "rb");
fseek(partenza, inizio, SEEK_SET);
target = fopen(arrivo, "wb"); //apro il file
if (target) { //se è aperto
while ((c = fgetc(partenza)) != EOF && ftell(partenza)<=fine-10) { //e il carattere preso non eccede la fine del file
fputc(c, target);
fputc(c, stdout);
pos = ftell(partenza);
if(pos==fine)
{
break;
}
//scrivo lo stesso carattere in out (file in uscita)
} //
fclose(target); //chiudo il file
fclose(partenza);
}
else
{
printf("errore di scrittura del file \n");
}
}
Поскольку мне нужно двоичные файлы, которые будут извлечены правильно, я могу использовать код я писал выше, или же я должен изменить все fgetc()
и fputc()
Функции с fread()
и fwrite()
?
Благодаря
Да, вы должны изменить или потратить значительное время на отладчик, чтобы обнаружить, что ваш fget получил какое-то недопустимое значение и создал havoc. – abasu
Либо нет проблем при выполнении чтения, чтобы написать одно письмо, чтобы открыть двоичный файл. – BLUEPIXY
@abasu О чем вы говорите? Я не вижу проблем с использованием 'fgetc' здесь. Остановите неправильную диагностику. Я вижу использование нескольких переменных, которые не объявлены. По этой причине мы не можем помочь АндреаГоттарди с этим кодом. AndreaGottardi: Создайте минимальный компилируемый тестовый файл для записи информации из структуры (которая не обязательно является «структурой») в файл. Затем создайте минимальный компилируемый тестовый файл, чтобы прочитать информацию из файла в структуру. Предоставьте оба из них здесь, но ТОЛЬКО, если они действительно скомпилируются ... Задайте вопрос о том, что вы не понимаете ... – Sebivor