Частичное усечение потока (fstream или ofstream) в C++


Я пытаюсь частично усечь (или сократить) существующий файл, используя fstream. Я пытался написать символ EOF, но это, кажется, ничего не дает.

Любая помощь будет признательна...

4 4

4 ответа:

Я не думаю, что вы можете. Существует множество функций для перемещения" вверх и вниз " иерархии оболочки для HANDLE<->int<->FILE *, по крайней мере в Windows, но нет "правильного" извлечения FILE * из объекта iostreams (если он даже реализован с одним).

Вы можете найти этот вопрос полезным.

Лично я настоятельно рекомендую избегать iostreams, они плохо спроектированы, сильно C++ и неприятны на вид. Взгляните на Boost iostreams , или wrap stdio.h Если вам нужно использовать классы.

Соответствующей функцией для stdio являетсяftruncate () .

Повышение .Библиотека Interprocess определяет переносимую функцию truncate. По какой-то причине он не документирован, но вы можете найти его в этом заголовочном файле.

Это будет зависеть от операционной системы. Большинство ОС поддерживают это, но по-разному. В Windows есть SetEndOfFile(). В Unix и подобных системах вы lseek туда, где вы хотите, чтобы файл заканчивался, и делаете lwrite нулевых байтов там. Другие операционные системы, несомненно, используют другие методы.

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