Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.222.69.152] |
|
Сообщ.
#1
,
|
|
|
Есть один вопрос. Считал я всё, что мне нужно из бинарного файла. Но тепер мне функция tellg() ПОСТОЯННО возвращает -1. КАК можно заставить её снова работать нормально, не закрывая и открывая файл заново?
|
Сообщ.
#2
,
|
|
|
file.clear() |
Сообщ.
#3
,
|
|
|
Спасибо! Получилось!
Еще тогда один вопрос - можно ли как-то очистить файл или удалить всё, что находиться ПОСЛЕ какой-то метки? ну то есть переходишь на какое-нибудь место в файле с помощью seekg(), а потом удаляешь всё, что находиться после этой метки. В Паскале такая функция была, Truncate по-моему, а в С++? |
Сообщ.
#4
,
|
|
|
ftruncate, chsize
|
Сообщ.
#5
,
|
|
|
grustnoe
Они относяться к fstream? |
Сообщ.
#6
,
|
|
|
Нет, это C. Они обе из <cfcntl>. fstream не предоставляет подобных операций. Можно, разве что, считать нужную часть данных в какой-нибудь буфер, а потом перезаписать файл.
|
Сообщ.
#7
,
|
|
|
Baseg
Да похоже так и придется делать... |
Сообщ.
#8
,
|
|
|
можно вытащить из fstream дескриптор файла и сделать на нем вызов ftruncate
|
Сообщ.
#9
,
|
|
|
grustnoe, где позволяется вытащить дескриптор??? В стандарте такого нет. Из него вообще выкинули средства для работы fstream с дескрипторами ( класс std::fstream не имеет более ни конструктора fstream(int), ни метода attach(int) ).
Я немного покопал, чтобы узнать, причины, почему нельзя извлечь дескриптор. Нашёл на www.codecomments.com Цитата Because if it was possible to extract the file descriptor, it might not be in the state other code expects it to be, and even if it was it very likely wouldn't stay that way? Consider, if you will, that fstreams generally buffer their input and output. A naive implementation of a "get_fd" function might not guarantee that the buffers are flushed. And then, once you have it, how do you propose to keep the file descriptor and the stream in something approximating the same state? The whole thing's a mess, and best avoided. |
Сообщ.
#10
,
|
|
|
ну ок, если официальными путями - то делать копию и перезаписывать файл
|
Сообщ.
#11
,
|
|
|
grustnoe
Да я уже всё сделал. Просто интересовало - можно ли это вобще сотворить без перезаписи файла. |