Я имею текстовый файл, ассоциированный с объектом std::fstream.
std::fstream finout("text.txt");
Затем из этого файла производиться чтение. Считанные данные анализируются и некоторые из них удаляются. Таким образом размер выходных данных может уменьшиться и возникает необходимость усечь файл (либо же изменить его размер). Кажется совершенно глупо и расточительно создавать новый файл и записывать результат в него. Мне хотелось бы получить более эффективный и простой способ добиться желаемого результата. Язык Си предлагает функции ftruncate и chsize, однако я использую объект класса std::fstream.
P. S. На англоязычных сайтах я встречал подобные вопросы, но мне хотелось бы узнать мнение русскоязычной аудитории.
fstream не поддерживает подобных операций.
Можете попробовать использовать std::experimental::filesystem::resize_file (c++17)
Ну или старые добрые _chsize/ftruncate.
Вопрос неправильно поставлен - если данные в файле удаляются произвольно, в любой месте - какое тут может быть обрезание?? Формировать файл заново а старый удалять. Однако если это ну ооочень большой файл и переформировать его нерационально - можно использовать seekp - в этом случае можно придумать какую-то структуру файла, чтобы помечать удаляемые куски как пустые, затем при пополнении данных искать подходящего размера пустые куски и записывать туда - хоть в начала, в середине, в конце файла...
Сборка персонального компьютера от Artline: умный выбор для современных пользователей