@whatif32

Как реализовать изменение размера файла на Си?

Как на языке Си реализовать изменение размера файла без создания вспомогательного файла? Можно использовать только библиотеки, входящие в SDK ОС, и разумеется, плюсом ко всему, эта реализация должна работать на любой ОС.
  • Вопрос задан
  • 1435 просмотров
Решения вопроса 1
sfi0zy
@sfi0zy
Creative frontend developer
Как верно заметили выше, изменить файл без перезаписи нельзя - что логично. Возможно вы имели ввиду "увеличить размер файла, сохранив то, что в нем было"? Если так - то вам нужно смотреть в сторону чего-то вроде truncate для linux, чего-то вроде SetEnfOfFile для windows и чего-то еще для других ОС, входящих в определение "любых ОС". Если вы хотите все это использовать в одной программе - подумайте еще раз нужно ли это, и, если все-таки решите, что нужно - используйте условную компиляцию (можно еще код для разных ОС растащить в отдельные библиотеки и собирать под разные ОС с разными библиотеками).
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@Mercury13
Программист на «си с крестами» и не только
Чтобы увеличить файл, надо дописать в конец.
Libc — fopen(..., "wa");
WinApi — CreateFile с нужными правами, затем SetFilePointer в конец и дописывай на здоровье.

Чтобы уменьшить файл
В Libc этого нет, есть функции POSIX truncate/ftruncate, в Win32 — _chsize.
WinApi — SetEndOfFile.
Ответ написан
Комментировать
RiseOfDeath
@RiseOfDeath
Диванный эксперт.
А как вы себе представляете изменения файла без перезаписи? Изменения подразумевают перезапись.

Ну и кроме того, "использовать библиотеки, входящие в SDK ОС" и "должна работать на любой ОС" это взаимоисключающие параграфы.
Ответ написан
@iv_k
открыть с флагом a (append) и дописать сколько надо. данные которые были не перезапишутся
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы