fstream удалить N байтов с конца бинарного файла

можно ли удалить N байтов с конца двоичного файла на С++ с помощью fstream (или чего-то подобного)? Я не хочу читать весь файл, вырезать его и записывать снова, но поскольку это с конца файла, похоже, такой проблемы быть не должно.

Спасибо за любой совет.


person hynner    schedule 03.02.2014    source источник
comment
Как обрезать файл в C?   -  person phuclv    schedule 07.01.2019


Ответы (2)


Я не знаю общего С++ (независимого от платформы) способа сделать это без записи нового файла. Однако в системах POSIX (Linux и т. д.) вы можете использовать функцию ftruncate(). В Windows можно использовать SetEndOfFile().

Это также означает, что вам нужно будет открыть файл, используя собственные функции вместо fstream, поскольку вам нужен собственный дескриптор/дескриптор для этих функций.

РЕДАКТИРОВАТЬ: Если вы можете использовать библиотеку Boost, она имеет resize_file() function в своей библиотеке файловой системы, которая будет делать то, что вы хотите.

person TypeIA    schedule 03.02.2014
comment
Ладно, лучше, чем ничего, я думаю :-) - person hynner; 03.02.2014
comment
@hynner Я добавил несколько ссылок на Boost, у которого также есть решение для этого. - person TypeIA; 03.02.2014
comment
Да, спасибо, вы подтолкнули меня в правильном направлении, и я сам только что нашел его, большое спасибо - person hynner; 03.02.2014

Обновление:

Теперь в C++17 вы можете использовать resize_file из файловая система

Прямой эфир на Coliru

person Hani Shams    schedule 19.05.2019