Как записать, а после прочитать из бинарного файла структуру?

Суть такая, пишу аля "Архиватор", суть такая, имеется структура:

struct File {
      char *fileName;
      char *fileContent;
      unsigneв int fileSize;
}


После чего начинаю обрабатывать файл, который вводит пользователь:
P.S.: {Прошу сразу прощения, будет скриншот, не могу сделать захват текста с виртуальной машины
Кст, да, пишу на Си под Linux.}

5e9cbba5029bc098161653.png

Я определяю размер файла, который на вход, после чего выделяю память для ПЕРЕМЕННОЙ структуры, чтобы потом fread в эту переменную содержимое файла, сохраняю всю структуру в файл. Почему-то бинарный файл меньше исходного, хотя там структура. Исх. файл 13 байт "Hello world!", а бинарный где-то 6-7 байт получается, не понимаю почему так.

И как потом прочитать эту структуру, если я выделял память отдельно еще под содержимое?
Пробовал выделить для структуры память в видеstruct File *test = malloc(struct File) и прочитать файл fread(test, РАЗМЕР_ФАЙЛА, 1, ФАЙЛ), но выдает ошибку, не могу разобраться, как прочитать файл? Но у меня еще есть ощущение, что я неправильно делаю запись в бинарник, насчет того, что выделяю память отдельно для переменной еще.
  • Вопрос задан
  • 614 просмотров
Пригласить эксперта
Ответы на вопрос 1
maaGames
@maaGames
Погроммирую программы
ПЕРЕМЕННОЙ структуры не бывает, размер всех типов данных фиксируется в момент компиляции. Память нужно выделять отдельно для каждого поля структуры и сохранять/загружать придётся каждое поле по отдельности. Т.е. в файл пишешь "размер fileName", "байты fileName", "размер fileContent", "байты fileContent". Сразу замечу, что unsigned int для размера файла ограничивает размер файла до 4 гигабайт, лучше сразу int64_t использовать (не знаю, как в Си его принято обзывать).
На чтение/запись нужно открывать в бинарном виде (для данной задачи), а не в текстовом.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы