Частичное усечение потока (fstream или ofstream) в C++
Я пытаюсь частично усечь (или сократить) существующий файл, используя fstream. Я пытался написать символ EOF, но это, кажется, ничего не дает.
Любая помощь будет признательна...
4 ответа:
Я не думаю, что вы можете. Существует множество функций для перемещения" вверх и вниз " иерархии оболочки для
HANDLE<->int<->FILE *
, по крайней мере в Windows, но нет "правильного" извлеченияFILE *
из объекта iostreams (если он даже реализован с одним).Вы можете найти этот вопрос полезным.
Лично я настоятельно рекомендую избегать iostreams, они плохо спроектированы, сильно C++ и неприятны на вид. Взгляните на Boost iostreams , или wrap stdio.h Если вам нужно использовать классы.
Соответствующей функцией для stdio являетсяftruncate () .
Повышение .Библиотека Interprocess определяет переносимую функцию
truncate
. По какой-то причине он не документирован, но вы можете найти его в этом заголовочном файле.
Это будет зависеть от операционной системы. Большинство ОС поддерживают это, но по-разному. В Windows есть
SetEndOfFile()
. В Unix и подобных системах выlseek
туда, где вы хотите, чтобы файл заканчивался, и делаетеlwrite
нулевых байтов там. Другие операционные системы, несомненно, используют другие методы.