Частично обрезать поток (fstream или ofstream) в C ++ - PullRequest
4 голосов
/ 14 февраля 2010

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

Любая помощь будет оценена ...

Ответы [ 4 ]

2 голосов
/ 14 февраля 2010

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

Возможно, вам понадобится этот вопрос .

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

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

1 голос
/ 14 февраля 2010

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

0 голосов
/ 15 февраля 2010

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

0 голосов
/ 14 февраля 2010

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

...