![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Kuvaldis |
|
|||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: 11 Всего: 61 |
Как-то упустил я в свое время работу с файлами как потоками. Теперь догоняю.
Проблема следующая. Реализую работу по прямому доступу к файлу. Но в режиме ios::ate в файл: 1. не дописывается информация, а затирается (2005 студия) 2. дописывается, но после этого больше ничего нельзя ввести (как будто cin забит, хотя я вроде его сбрасываю) (VC++ 6) 3. записывается задом наперед ( Builder 6). ДЛя восстановления полседовательности: тискаем "создать файл" - append - вводим 5-ки, потом 3-ки пишет почему-то 5 - 3, хотя пишу в нужное место (упрорядоченное) Был бы рад услышать конструктивую критику по поводу данной проблемы. СУВ, Kuvaldis Вот код:
Эх, не знал, что у меня 800-ое сообщение будет таким грустным :( -------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
|||
|
||||
| vinter |
|
||||||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
вот тут не совсем понятно, ты тут со смещением ниче не напутал?
а вообще про блемы только в
или нет? |
||||||
|
|||||||
| Kuvaldis |
|
||||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: 11 Всего: 61 |
vinter,
Неа, тут все правильно. Потому что студия 2005 и вижуал 6 пишут правильно Но даже с
повторный вызов void AppendFile() не делает того, что нужно :( -------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
||||
|
|||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
||||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 4 Всего: 67 |
гмм...странно...файл затирается прямо при открытии...
при ios::app не затирается, но и позиция в файле почему то на нужную не изменяется... -------------------- СУВ, Partizan. |
|||
|
||||
| Kuvaldis |
|
|||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: 11 Всего: 61 |
JackYF,
ios::app пишет только в конец файла Мне же надо открыть файл для записи, но его не урезать и с возможностью писать в любое место. Поэтому и использую ios::ate Это сообщение отредактировал(а) Kuvaldis - 29.3.2007, 18:49 -------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
не знаю че у вас там с позицией, а я последовательно три записи сделал и все ОК |
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 4 Всего: 67 |
=) vinter, что...и даже файл при открытии не затирается? )
-------------------- СУВ, Partizan. |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
не затирается |
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 4 Всего: 67 |
гммм...странно...у меня такой же код при первом вызове AppendFile его затирает...
-------------------- СУВ, Partizan. |
|||
|
||||
| Kuvaldis |
|
|||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: 11 Всего: 61 |
vinter,
Твой вариант стал работать в Visual 6. Если бы больше не работал в Bulder, списал бы все на время НО... не работает в 2005 студии Т.е. все пишется, но почему-то в конец файла, а должно в нужное место :( Это сообщение отредактировал(а) Kuvaldis - 29.3.2007, 19:04 -------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
нет у меня все нормально(2003),даже несколько раз программу запускал, добавлял выходил, потом смотрел, короче все нормально
|
|||
|
||||
| Kuvaldis |
|
|||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: 11 Всего: 61 |
Записи должы выводиться отсортированными по AcctNum
Это сообщение отредактировал(а) Kuvaldis - 29.3.2007, 19:09 -------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
вкурил походу про позицию, это если вводишь 2, то она должна вторую строку затереть?? если да то у меня тоже с позицией не работает, и не будет это работать надо файл перезаписывать снова, а в этом файле менять нельзя!
|
|||
|
||||
| Kuvaldis |
|
|||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: 11 Всего: 61 |
Идея такова:
есть файл с пустыми записями (на 100 эл-тов) ПО вводимому account я записываю в файл на позицию account новую запись. Поэтому при выводе файла все записи будут или заняты, или свободны. При последовательном (!) чтении файла и выводе его содержимого эл-ты должны (?) выводиться по возрастанию account (они так записывались, вставкой в нужное место) Это сообщение отредактировал(а) Kuvaldis - 29.3.2007, 19:15 -------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
не уверен, но насколько я знаю, файл который ты открываешь редактировать нельзя, только полная перезапись или добавление в конец.
так что лучше читай его в буфер, потом делай преобразования, а потом уже записывай новую информацию переписывая весь файл. |
|||
|
||||
| Kuvaldis |
|
|||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: 11 Всего: 61 |
vinter,
В Страуструпе я нужного не нашел (может есть), а этот пример - из Дейтела "Как программировать на С++" Должен быть рабочий. В этом то и дело :( -------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
так и есть. хороший совет. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 12 Всего: 459 |
Да легко
Это делается при помощи функций fopen fseek fread fwrite / все описания есть в любой справке или я вот нашел у дейтла. Добавлено через 2 минуты и 26 секунд fseek - устанавливает позицию в файле а fwrite пишет начиная с нее. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Kuvaldis |
|
|||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: 11 Всего: 61 |
Вот так работает:
(табл. 13.33 у Джосьютиса.) -------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
Корректней (идеологически) тогда уж std::fstream, а не std::ofstream.
|
|||
|
||||
| threef |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 27.10.2005 Где: Запорожье Репутация: 9 Всего: 10 |
Daevaorn,
?? Если бы так было, то впору удавиться. Файлы можно и нужно и читать, и писать тут же. Для этого и существует +, ::in | ::out, READWRITE и другие флажки, обозначающие одно и то же: открыт и для записи, и для чтения. |
|||
|
||||
| threef |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 27.10.2005 Где: Запорожье Репутация: 9 Всего: 10 |
Kuvaldis,
вот код с моими комментариями. Если есть желание разбираться детально - пожалуйста.
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |