На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> Работа с fstream
    Есть один вопрос. Считал я всё, что мне нужно из бинарного файла. Но тепер мне функция tellg() ПОСТОЯННО возвращает -1. КАК можно заставить её снова работать нормально, не закрывая и открывая файл заново?
      ExpandedWrap disabled
        file.clear()
        Спасибо! Получилось!

        Еще тогда один вопрос - можно ли как-то очистить файл или удалить всё, что находиться ПОСЛЕ какой-то метки?
        ну то есть переходишь на какое-нибудь место в файле с помощью seekg(), а потом удаляешь всё, что находиться после этой метки.
        В Паскале такая функция была, Truncate по-моему, а в С++?
        Сообщение отредактировано: FX Poster -
          ftruncate, chsize
            grustnoe
            Они относяться к fstream?
              Нет, это C. Они обе из <cfcntl>. fstream не предоставляет подобных операций. Можно, разве что, считать нужную часть данных в какой-нибудь буфер, а потом перезаписать файл.
                Baseg
                Да похоже так и придется делать... :(
                  можно вытащить из fstream дескриптор файла и сделать на нем вызов ftruncate
                    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.
                    Сообщение отредактировано: Baseg -
                      ну ок, если официальными путями - то делать копию и перезаписывать файл :)
                        grustnoe
                        Да я уже всё сделал. Просто интересовало - можно ли это вобще сотворить без перезаписи файла.
                        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                        0 пользователей:


                        Рейтинг@Mail.ru
                        [ Script execution time: 0,0321 ]   [ 16 queries used ]   [ Generated: 2.05.24, 17:50 GMT ]