![]() |
|
Модераторы: bsa |
![]()
|
|
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
Добрый день, имею проблемы с флагом ios::ate, который по документации должен просто переместить указатель файла в конец, при этом сам файл не очищать. Но после такого кода:
Файл credit.dat полностью очищается. Подскажите в чем дело? P.S: изначально файл credit.dat содержал данные порядка 5 kb. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
в - |
|||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
boostcoder, можно по конкретнее?
|
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
если тебе нужно читать файл - используй ifstream
и про спасибо не забываем. |
|||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
boostcoder,
спасибо за ответ, но в том то и дело, что мне нужно записывать в файл в определенную позицию. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
проверь. |
|||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
boostcoder, так не стирается, но данные записываются только в конец, а мне нужно в определенную позицию. Видимо ios::app не даст переместить указатель.
|
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
покажи как перемещаешь его? |
|||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
|
|||
|
||||
| Crafty |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 3.11.2008 Репутация: 12 Всего: 14 |
Про seekp тут посмотри. Думаю можно еще просто открыть файл и записывать вот так seekp(-1, fstream::end); Это сообщение отредактировал(а) Crafty - 9.10.2010, 23:11 |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
ясно.
попробуй так:
|
|||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
||||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
yngwie19, seek почти бесполезна для текстовых файлов! так как у тебя запись может иметь минимальный размер 12/13 байт (*nix/windows соответственно: "1 a b 0.1\n"), а максимальный раз в 10 больше. То что ты вычисляешь положение через sizeof структуры, ты не помогаешь себе. Будет возвращен размер занимаемой структурой памяти (кстати, это далеко не всегда sizeof(int)+20+20+sizeof(float)), а ты при записи (через file << account << first << last << balance) делаешь форматированный вывод.
Если же ты записываешь в двоичный файл, то: 1. расширение .txt не самое удачное для такого типа файлов 2. открывать файл надо с опцией ios::binary, чтобы под Windows символ с кодом 10 не превращался в два (один 13, другой 10) при записи, а при чтении наоборот - два в один. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
потому что файл открывался в режиме чтения. хотя это странно. я ведь ни указал не std::ios::in не std::ios::out.. хз Добавлено @ 23:20 полностью согласен с bsa. я сразу не смог правильно ответить, из-за того что никогда не использовал плюсовые файловые объекты для дозаписи в существующий файл. если же вам действительно нужно хранить в файл разнотипную информацию, используйте boost.serialization, или какую-то простенькую БД, типа sqlitepp. Это сообщение отредактировал(а) boostcoder - 9.10.2010, 23:22 |
|||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
bsa, Мне в принципе это и нужно, таким образом я делаю файл произвольного доступа, пусть память в этом случае расходуется не рационально, но по крайней мере я всегда смогу быстро перейти к определенной записи и сделать с ней все что угодно (обновить, сделать пустой).
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |