| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > Сохранение переменных в файл. |
| Автор: Achillius 28.3.2006, 17:07 |
| Подскажите ешё пожалуйста, как мне сохранить переменные в файл так, чтобы потом можно было не писать все занова, а просто открыть этот файл и все поля бы были заполнены старыми данными. В общем суть такая. Есть 7 диалоговых окон с данными, которые заполняет пользователь частично, а остальное считается автоматически. Каждому EditBox и ListBox присвоены свои переменные. Какждое окно имеет свой индивидуальный класс. Названия многих переменных в разных классах разных окон совпадают. Есть кнопки "вперёд" и "назад". При переходе в новое окно старое закрываю OnOK(). Может, окно просто надо прятать?? А семь спрятанных окон это не слишком?? как-то некрасиво. Когда я перехожу в новое модальное диалоговие окно, все переменные в старом почему-то обнуляются, а мне хотелось бы, чтобы при возврате назад значения были бы те, что пользоваетель тольео что ввел. У каждого окна есть функция OnInitDialog(), которая задаёт некоторые значения переменных (начальные) и инициализуется в конструкторе. Некоторые - но не все. Она работает корректно, но обнуляются сами переменные, т.е. при попытке EditBox присвоить значение переменной и сделать UpdateData(FALSE) все равно получается ноль. В чем проблема подскажите. А ешё, как мне сделать так, чтобы эти переменные после сохранения в файл и закрытия программы можно было бы считать и заполнить ими поля, чтобы не вводить все занова. Даже если подскажите направление движение мысли, буду оч. благодарен. Спасибо. |
| Автор: Kostt 28.3.2006, 17:31 | ||
Воспользуйся CTabCtrl |
| Автор: Achillius 1.4.2006, 10:49 | ||
Earnest, если я тебя правильно понял, то есть команда, которая может сразу целиком записывать структуру в файл и потом целиком её оттуда считывать. Или как. Что мне даст объединение в структуры?? Если есть такая команда , то подскажи, пожалуйста. Или это все как-то осуществляется с помощью File.Read() и File.Write()?? |
| Автор: En_t_end 1.4.2006, 16:52 |
| Achillius Просто берем и пишем WriteFile(....вставляем ссылку на структуру, и её sizeof.) Главное не забыть про #pragma pack |
| Автор: Dreamer_0x01 1.4.2006, 18:03 | ||||
В точку сказано! ;) Прочем, рано или поздно это все равно на своем опыте придется узнать ;) Особенно если предполагается запись/чтение данных разными программами.
Удобство. Чтобы все твои переменные читать не поэлементно, а поблочно. |
| Автор: Achillius 2.4.2006, 22:59 |
| Блин, хорошо вам, когда вы все команды знаете. а у меня ни фига ни в книгах нет, ни в нете толково не найду. Это я про операции с файлами: как открыть, как закрыть, как в нужую позицию установить, как записать в файл и прочее.. Просил же пример... Я, блин, новичек тупой. Ну, не тупой, может, но новичек в этом деле, а написать диплом надо... |
| Автор: DeadSoul 2.4.2006, 23:01 | ||
CFile или CStdioFile. Описание искать на msdn.microsoft.com или в MSDN-е установленном на твоем компе. |
| Автор: Dreamer_0x01 3.4.2006, 01:01 | ||||
Ну раз уж в ветк MFC пишем, то о CFile и будем говорить. А нужно-то для работы всего несколько методов этого класса - Open(),Close(),Read(),Write(), ну и для этапа изучения вполне хватит. описания этих методов в MSDN уж на столько простые и ясные, что даже мне с отсутствием знания английского этого вполне хватило.
А за вас никто диплом писать и не собирается. Вот на конкретные вопросы с удовольствием ответим. А пока что вопросы строятся на уровне "я хочу все уметь,что мне делать?" |
| Автор: Achillius 3.4.2006, 12:35 |
| Спасибо за подсказки. Я даже и не знал, что в нете есть сайт 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). Почему?? |
| Автор: Dreamer_0x01 3.4.2006, 14:49 | ||||
| а все праавильно. Числа типа float представляются блоком байт (четырех, если память не изменяет). Когда вы в каком-то редаторе смотрите содержание файла, то каждый байт представляется в виде символа. однако, при прочтениии похожей командой этих данных из файла,
эти четыре байта будут снова считаны и преобразованы в единый блок, который будет соотвтествовать вашему записанному числу. Так что ошибки тут нет. Другой вопрос в том, что если вы хотите видеть записанные числа в "явном" виде , то вам придется сначала преобразовать число в строку, а только после этого записывать ее в файл. То есть нечто такое:
НО!!! читать в этом случае вы тоже должны будите именно строку, и потом приобразовывать ее в число! Так что выбирайте - либо наглядность данных в вашем файле, либо удобство их чтения/записи. |
| Автор: takedo 3.4.2006, 14:59 | ||
можно данные для работы писать в бинарник, а для посмотреть - в тектовый... Все довольны. |
| Автор: Dreamer_0x01 3.4.2006, 15:08 | ||
Ну на самом деле я и "посмореть" предпочитаю в бинарнике, в шестнадцатеричном редакторе, привычка ;) |
| Автор: Achillius 4.4.2006, 19:27 |
| Вот этого я и боялся... Все верно, числа записываются и читаются корректно, проверял. А боялся я, что каждое число надо будет преобразовывать в строку. Мне надо просто все эти числа потом сделать в txt-файл нормальный, т.к. его надо будет распечатывать. Есть какая-нть команда, чтобы этот корявый файл с переменными сразу в текстовый перевести одной командой, а??? или прийдётся везде в строки каждый раз делать? Я сдохну, у меня там переменных больше трёх сотен |
| Автор: Dreamer_0x01 6.4.2006, 15:11 |
| Спокойствие. От этого еще никто не умирал ;) Нужно изначально продумывать такие вещи, а не после того, как программа написана. А вообще...Не вижу в этом чего-то особенно сложного. Переменные наверняка каким-то образом объединены в какие-то логические блоки. Вот в цикле по каждому такому "блоку" и делаем преобразования. А если у вас ВСЕ переменные одного типа, как вы указали, float - то вообще в ОДНОМ ЕДИНСТВЕННОМ цикле одна и та же команда способна их все "конвертировать" в текстовый формат. |
| Автор: heavyduty 9.10.2007, 08:12 |
| Здравствуйте! Такой вот вопрос, если сказано, что надо сохранить полученные данные от пользователя, при нажатиии на OK, надо создавать файл? Спасибо |
| Автор: Greeen 9.10.2007, 15:08 |
| Надо |
| Автор: it_medved 17.10.2007, 09:20 | ||
Вот пример записи переменной int в бинарный файл:
|