Как лучше всего обрезать конец файла fstream в C ++ 11
Я пишу класс персистентности данных для хранения аудио для моего аудиоредактора.Я решил использовать fstream (возможно, плохую идею) для создания файла с произвольным доступом для чтения и записи.
Каждый раз, когда я записываю небольшой звук в свой файл, я просто прикрепляю его к концу этого файла.Другая внутренняя структура данных / файл содержит указатели на аудиофайл и отслеживает изменения.
Когда я отменяю действие записи, а затем делаю что-то еще, последний бит аудиофайла становится неактуальным.На него нет ссылки в текущем состоянии документа, и вы не можете вернуться обратно в состояние, в котором вы сможете увидеть его снова.Поэтому я хочу отрезать эту часть файла и начать запись с нового конца.Мне не нужно вырезать биты в середине, просто с конца.
Когда пользователь выйдет, этот файл останется и будет перезагружен при повторном открытии проекта.
В моем приложении я ожидаю, что пользователь будет делать это все время, и возможность сделать это может сэкономить мне до 30% размера файла.Этот файл будет длинным, потенциально очень, очень длинным, поэтому каждый раз, когда это происходит, перезаписывать его в другой файл нельзя.
Переписать его, когда пользователь сохраняет, может быть вариант, но он все еще не так привлекателен.
Я мог бы вставить значение в начале, которое говорит, как долго должен быть файл, и затем перезаписать конец, чтобы перезапустить пространство, но в то же время.Если бы я хотел постоянно обновлять файл хранилища данных в случае сбоя, это означало бы, что я буду переписывать начало снова и снова.Я беспокоюсь, что это может быть плохо для флешек.Я мог бы также пересчитать конец полезной части файла при загрузке, проанализировав файл указателя, но в то же время я мог бы потратить все это пространство потенциально, и это сложно.
Есть ли простой вызов для этого в API fstream?
Я использую не ту библиотеку?Заметьте, я хочу придерживаться чего-то общего STL, которое я предпочел, чтобы я мог сохранить код как можно более кросс-платформенным.
Я не могу найти его в документации и искал много часов.Это не конец света, но сделал бы это немного проще и потенциально более эффективным.Возможно я просто скучаю по этому как-то.
Спасибо за помощь Andre '