Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.119.167.196] |
|
Сообщ.
#1
,
|
|
|
Пусть есть файл, открытый для чтения и записи - и поток fstream.
Пока пишешь файл от начала до конца - все нормально. Но теперь в самое начало файла нужно дописать строку 8 символов. Установка seekg(0) и запись строки той же самой функцией, что работала только что, - происходит ошибка. tellg возвращает -1, как будто поток умирает. Помогает после этого только перезапуск программы. Как записать данные с помощью fstream в начало файла? ИЛИ другой вариант открыть файл как бинарный - и записать эти 8 байт в начале, не перезатирая эти 8 байт в файле, а подвинув весь файл на 8 байт? |
Сообщ.
#2
,
|
|
|
Это методы для потоков ввода. Для потоков вывода seekp() и tellp(). Если у тебя поток одновременно и на то, и на другое, между разными операциями нужно либо seek()ать, либо clear()ить, иначе вывод после ввода или наоборот будут давать ошибку.
Двигать данные файлов вперёд-назад нельзя. Они по определению потоковые объекты. Если нужно вставить или удалить что-то, то это только руками: читаешь хвост и пишешь по новому смещению. Если данных много, и весь хвост держать в памяти накладно, лучше через временный файл делать. |