Если вы хотите сохранить предыдущее содержимое файла до некоторой длины (длина больше нуля, которую предоставляют другие ответы), то POSIX предоставляет функции truncate()
и ftruncate()
для задания.
#include <unistd.h>
int ftruncate(int fildes, off_t length);
int truncate(const char *path, off_t length);
Название указывает на основную цель - сокращение файла. Но если указанная длина больше, чем предыдущая, файл увеличивается (заполнение нулями) до нового размера. Обратите внимание, что ftruncate()
работает с дескриптором файла, а не с FILE *
; Вы можете использовать:
if (ftruncate(fileno(fp), new_length) != 0) ...error handling...
Однако вы должны знать, что смешивание потока файлов (FILE *
) и файлового дескриптора (int
) доступа к одному файлу может привести к путанице - см. Комментарии к некоторым проблемам. Это должно быть последним средством.
Вполне вероятно, однако, что для ваших целей урезание при открытии - это все, что вам нужно, и для этого будет достаточно вариантов, предоставленных другими.
Для Windows есть функция SetEndOfFile()
и связанная функция SetFileValidData()
, которая может выполнять аналогичную работу, но с использованием другого интерфейса. По сути, вы ищете место, где хотите установить конец файла, а затем вызываете функцию.
Также есть функция _chsize()
, как описано в ответе от sofr .