![]() |
|
|
![]()
|
|
| Achillius |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 11.3.2006 Репутация: -1 Всего: нет |
Подскажите ешё пожалуйста, как мне сохранить переменные в файл так, чтобы потом можно было не писать все занова, а просто открыть этот файл и все поля бы были заполнены старыми данными. В общем суть такая. Есть 7 диалоговых окон с данными, которые заполняет пользователь частично, а остальное считается автоматически. Каждому EditBox и ListBox присвоены свои переменные. Какждое окно имеет свой индивидуальный класс. Названия многих переменных в разных классах разных окон совпадают. Есть кнопки "вперёд" и "назад". При переходе в новое окно старое закрываю OnOK(). Может, окно просто надо прятать?? А семь спрятанных окон это не слишком?? как-то некрасиво. Когда я перехожу в новое модальное диалоговие окно, все переменные в старом почему-то обнуляются, а мне хотелось бы, чтобы при возврате назад значения были бы те, что пользоваетель тольео что ввел. У каждого окна есть функция OnInitDialog(), которая задаёт некоторые значения переменных (начальные) и инициализуется в конструкторе. Некоторые - но не все. Она работает корректно, но обнуляются сами переменные, т.е. при попытке EditBox присвоить значение переменной и сделать UpdateData(FALSE) все равно получается ноль. В чем проблема подскажите.
А ешё, как мне сделать так, чтобы эти переменные после сохранения в файл и закрытия программы можно было бы считать и заполнить ими поля, чтобы не вводить все занова. Даже если подскажите направление движение мысли, буду оч. благодарен. Спасибо. |
|||
|
||||
| Kostt |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 169 Регистрация: 8.1.2006 Где: Томск Репутация: 2 Всего: 3 |
Воспользуйся CTabCtrl |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Если я правильно тебя поняла - не надо городить отсебятину со всеми этими окнами. Ровно то самое делает СPropertySheet в режиме Wizard. Все свои переменные собери в структуру(ы), которые и будешь писать\читать из файла. При создании диалога (страниц) копируй элементы структуры во внутренние переменные окон, по закрытию окна - копируй обратно. Все остальное на DODataEchange (обмен между переменными и контролами). Можно, вместо копирования переменных, просто передать ссылку на структуру данных в диалог и работать с переменными прямо - это если не нужна возможность восстановить данные после прохождения нескольких окон (например, если пользователь в 5-м окне нажал Cancel). -------------------- ... |
|||
|
||||
| Achillius |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 11.3.2006 Репутация: -1 Всего: нет |
Earnest, если я тебя правильно понял, то есть команда, которая может сразу целиком записывать структуру в файл и потом целиком её оттуда считывать. Или как. Что мне даст объединение в структуры?? Если есть такая команда , то подскажи, пожалуйста. Или это все как-то осуществляется с помощью File.Read() и File.Write()?? |
|||
|
||||
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: 2 Всего: 20 |
Achillius
Просто берем и пишем WriteFile(....вставляем ссылку на структуру, и её sizeof.) Главное не забыть про #pragma pack |
|||
|
||||
| Dreamer_0x01 |
|
||||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
В точку сказано! ;) Прочем, рано или поздно это все равно на своем опыте придется узнать ;) Особенно если предполагается запись/чтение данных разными программами.
Удобство. Чтобы все твои переменные читать не поэлементно, а поблочно. -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
||||
|
|||||
| Achillius |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 11.3.2006 Репутация: -1 Всего: нет |
Блин, хорошо вам, когда вы все команды знаете. а у меня ни фига ни в книгах нет, ни в нете толково не найду. Это я про операции с файлами: как открыть, как закрыть, как в нужую позицию установить, как записать в файл и прочее.. Просил же пример... Я, блин, новичек тупой. Ну, не тупой, может, но новичек в этом деле, а написать диплом надо...
|
|||
|
||||
| DeadSoul |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1217 Регистрация: 25.9.2005 Где: Москва Репутация: 2 Всего: 11 |
CFile или CStdioFile. Описание искать на msdn.microsoft.com или в MSDN-е установленном на твоем компе. -------------------- Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". Бьем спамеров их же оружием. Пусть весь спам сыпется им [email protected] |
|||
|
||||
| Dreamer_0x01 |
|
||||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
Ну раз уж в ветк MFC пишем, то о CFile и будем говорить. А нужно-то для работы всего несколько методов этого класса - Open(),Close(),Read(),Write(), ну и для этапа изучения вполне хватит. описания этих методов в MSDN уж на столько простые и ясные, что даже мне с отсутствием знания английского этого вполне хватило.
А за вас никто диплом писать и не собирается. Вот на конкретные вопросы с удовольствием ответим. А пока что вопросы строятся на уровне "я хочу все уметь,что мне делать?" Это сообщение отредактировал(а) Dreamer_0x01 - 3.4.2006, 01:03 -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
||||
|
|||||
| Achillius |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 11.3.2006 Репутация: -1 Всего: нет |
Спасибо за подсказки. Я даже и не знал, что в нете есть сайт MSDN. С функциями разобрался, это было легко, т.к. английский я знаю хорошо. Только теперь вопрос возник такой... Пишу текст:
CFile cf; cf.Open("test.txt",CFile::modeCreate | CFile::modeReadWrite ); cf.Write(&m_11_11,sizeof(m_11_11)); cf.Close(); Переменная m_11_11 типа float, которая берёт значение одного из EditBox. Так вот в файл только записываются какие-то закарючки вместо цифр (например ±рG вместо 123123). Почему?? Это сообщение отредактировал(а) Achillius - 3.4.2006, 12:37 |
|||
|
||||
| Dreamer_0x01 |
|
||||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
а все праавильно. Числа типа float представляются блоком байт (четырех, если память не изменяет).
Когда вы в каком-то редаторе смотрите содержание файла, то каждый байт представляется в виде символа. однако, при прочтениии похожей командой этих данных из файла,
эти четыре байта будут снова считаны и преобразованы в единый блок, который будет соотвтествовать вашему записанному числу. Так что ошибки тут нет. Другой вопрос в том, что если вы хотите видеть записанные числа в "явном" виде , то вам придется сначала преобразовать число в строку, а только после этого записывать ее в файл. То есть нечто такое:
НО!!! читать в этом случае вы тоже должны будите именно строку, и потом приобразовывать ее в число! Так что выбирайте - либо наглядность данных в вашем файле, либо удобство их чтения/записи. -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
||||
|
|||||
| takedo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 501 Регистрация: 1.6.2005 Репутация: нет Всего: 3 |
можно данные для работы писать в бинарник, а для посмотреть - в тектовый... Все довольны. -------------------- я не гольфист - я хоккеист |
|||
|
||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
Ну на самом деле я и "посмореть" предпочитаю в бинарнике, в шестнадцатеричном редакторе, привычка ;) -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
| Achillius |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 11.3.2006 Репутация: -1 Всего: нет |
Вот этого я и боялся... Все верно, числа записываются и читаются корректно, проверял. А боялся я, что каждое число надо будет преобразовывать в строку. Мне надо просто все эти числа потом сделать в txt-файл нормальный, т.к. его надо будет распечатывать. Есть какая-нть команда, чтобы этот корявый файл с переменными сразу в текстовый перевести одной командой, а??? или прийдётся везде в строки каждый раз делать? Я сдохну, у меня там переменных больше трёх сотен
|
|||
|
||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
Спокойствие. От этого еще никто не умирал ;) Нужно изначально продумывать такие вещи, а не после того, как программа написана. А вообще...Не вижу в этом чего-то особенно сложного. Переменные наверняка каким-то образом объединены в какие-то логические блоки. Вот в цикле по каждому такому "блоку" и делаем преобразования. А если у вас ВСЕ переменные одного типа, как вы указали, float - то вообще в ОДНОМ ЕДИНСТВЕННОМ цикле одна и та же команда способна их все "конвертировать" в текстовый формат. -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
| heavyduty |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 8.10.2007 Репутация: нет Всего: нет |
Здравствуйте!
Такой вот вопрос, если сказано, что надо сохранить полученные данные от пользователя, при нажатиии на OK, надо создавать файл? Спасибо |
|||
|
||||
| Greeen |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 710 Регистрация: 13.8.2006 Где: Петербург Репутация: 10 Всего: 18 |
Надо
-------------------- Подпись больше не нужна |
|||
|
||||
| it_medved |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 1.5.2007 Где: Днепропетровск Репутация: 1 Всего: 1 |
Вот пример записи переменной int в бинарный файл:
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |