Регистрация Главная Сообщество
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Ответ
 
Опции темы
Старый 22.04.2012, 17:59   #1
 Сержант
Аватар для Yukikaze
 
Yukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядом
Регистрация: 01.10.2011
Сообщений: 128
Популярность: 5723
Сказал(а) спасибо: 25
Поблагодарили 174 раз(а) в 105 сообщениях
 
По умолчанию Создание и сохранение файлов конфигурации

Предисловие
В связи с прогрессирующей тенденцией написания бесполезных или просто неправильных гайдов я решил написать свою статью, как говорится с покером и куртизанками.
Подмечу сразу, это не гайд, это статья повествующая о различных методах создания конфигов, то есть предназначена она для людей хотя бы немного смыслящих в том, что они делают.

Вступление
Можно отметить несколько основных способов создания конфигов.
1. Использование конфигурационного файла проекта. Чтение из такого конфига производится по пути Properties.Settings.Default.<Имя_ключа>
Данный вариант не сложный и не требует объяснений.

2. Использование WinAPI, в данном случае создается обычный *.ini файл вида
Код:
[СЕКЦИЯ]
Ключ=значение
Как это реализуется я опишу позже.

3. Сериализация. Сразу отмечу 2 типа сериализации бинарную и XML сериализации
3.1 XML сериализация. Как и в первом способе создается XML файл но с небольшим отличием, здесь мы делаем все вручную. XML файл можно прочитать любым текстовым редактором.
3.2 Бинарная сериализация более продвинута в плане скорости и защищенности, полученный файл можно прочитать используя только вашу программу.

Следует отметить, что сериализация используется не только для хранения но и для передачи данных, например можно передать сериализированный класс по протоколу TCP/IP, а на другом конце "провода" десериализировать обратно. Вобщем тема довольно обширная, я не буду затрагивать все ее аспекты, только основы.

4. Практика.
Нам потребуются слудующие пространства имен
Код:
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Xml.Serialization;
WinAPI
Начнем с самого простого примера, с использования WinAPI.
Для записи в конфиг в API есть метод
Код:
WritePrivateProfileString(string section, string key, string val, string filePath)
параметры: section - имя секции(то что будет в квадратных скобках)
key - имя ключа(то что перед знаком равенства)
val - значение(то что после знакак равенства)
filePath - путь к файлу
Для чтения
Код:
GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath)
параметры аналогичные, но появились новые
def - имя ключа принимаемое по умолчанию(если key не найдено)
retVal - буфер символов, в него будет производится запись
size - размер буфера
Код

XML сериализация
Отсюда начинается самое интересное. В таком файле можно хранить не только числа или строки, здесь можно записывать и затем читать экземпляры классов, списки в общем все что душа пожелает.
Давайте для примера напишем свой класс, у меня он будет называтся Window, он будет иметь 3 свойста.
Первое - координата X
Второе - координата Y
Третье - размер окна
Код
Давайте теперь напишеем метод записи в наш конфиг
Код
Таак, с записью мы разобрались, давайте попробуем прочитать данные из полученного файла
Код
Таким образом мы сохранили координаты нашего окна, а затем востановили их из файла.

Бинарная сериализация
В данном примере я буду использовать все тот же класс Window, и так начнем.
Добовляем нашему классу атрибут [Serializable()]. Атрибут Serializable сообщает компилятору, что все находящееся в классе может быть сохранено в файле.
Вот так будет выглядеть наш класс
Код
Теперь давайте попробуем сериализировать экземпляр класса
Код
Ну вот, с сериализацией мы кое как справились, давайте пробовать десериализацию
Код

Заключение
Поздравляю, вы справились с этой стеной текста, надеюсь вы нашли что почерпнуть из этой статьи.

Автор статьи Саня a.k.a Yukikaze собственной персоной
Автор статьи Саня a.k.a Yukikaze собственной персоной
________________
Talk is cheap. Show me the code
— Linus Torvalds

Последний раз редактировалось Yukikaze; 26.04.2012 в 21:13.
  Ответить с цитированием
4 пользователя(ей) сказали cпасибо:
Буянь (20.03.2013), крайслер (22.04.2012), Sinyss (23.04.2012), warl0ck (05.05.2012)
Старый 22.04.2012, 20:27   #2
 Старший сержант
Аватар для крайслер
 
крайслер сломал счётчик популярности :(крайслер сломал счётчик популярности :(крайслер сломал счётчик популярности :(крайслер сломал счётчик популярности :(крайслер сломал счётчик популярности :(крайслер сломал счётчик популярности :(крайслер сломал счётчик популярности :(крайслер сломал счётчик популярности :(крайслер сломал счётчик популярности :(крайслер сломал счётчик популярности :(крайслер сломал счётчик популярности :(
Регистрация: 04.02.2011
Сообщений: 198
Популярность: 12244
Сказал(а) спасибо: 453
Поблагодарили 435 раз(а) в 242 сообщениях
Отправить сообщение для крайслер с помощью Skype™
 
По умолчанию Re: Создание и сохранение файлов конфигурации

Вожможно не по теме: где найти перечень всех типов для каждого из элементов(Например: chekBox -bool, техВох - string....)?
________________

-Отложи на послезавтра то что можешь сделать сегодня, и тогда у тебя появятся два свободных дня!
  Ответить с цитированием
Старый 22.04.2012, 20:46   #3
 Сержант
Аватар для Yukikaze
 
Yukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядом
Регистрация: 01.10.2011
Сообщений: 128
Популярность: 5723
Сказал(а) спасибо: 25
Поблагодарили 174 раз(а) в 105 сообщениях
 
По умолчанию Re: Создание и сохранение файлов конфигурации

Ну вообще то тип контрола не равен типу его свойств, например checkbox != checkbox.Checked
так как checkbox это экземпляр класса CheckBox, а checkbox.Checked это его свойство.
А вообще MSDN или в самом коде пишеш например "checkbox." и смотришь в intellisense какое свойство или метод что возвращают
________________
Talk is cheap. Show me the code
— Linus Torvalds
  Ответить с цитированием
Старый 23.04.2012, 06:28   #4
 Старший сержант
Аватар для крайслер
 
крайслер сломал счётчик популярности :(крайслер сломал счётчик популярности :(крайслер сломал счётчик популярности :(крайслер сломал счётчик популярности :(крайслер сломал счётчик популярности :(крайслер сломал счётчик популярности :(крайслер сломал счётчик популярности :(крайслер сломал счётчик популярности :(крайслер сломал счётчик популярности :(крайслер сломал счётчик популярности :(крайслер сломал счётчик популярности :(
Регистрация: 04.02.2011
Сообщений: 198
Популярность: 12244
Сказал(а) спасибо: 453
Поблагодарили 435 раз(а) в 242 сообщениях
Отправить сообщение для крайслер с помощью Skype™
 
Question Re: Создание и сохранение файлов конфигурации

Цитата:
Сообщение от YukikazeПосмотреть сообщение
Ну вообще то тип контрола не равен типу его свойств, например checkbox != checkbox.Checked
так как checkbox это экземпляр класса CheckBox, а checkbox.Checked это его свойство.
А вообще MSDN или в самом коде пишеш например "checkbox." и смотришь в intellisense какое свойство или метод что возвращают

Наверное я не совсем правильно выразился или просто не понял... Приведу конкретный пример:

На форме два texBox-а. При загрузке программы, заполнение элементов осуществляется из фаила Seting.ini. По закрытию в Seting.ini записываются пользовательские данные.


Код

Как я понял для checkbox-а запись получится:
Код:
public static bool checkBox1;
Для textBox-а в котором цифры запись такая:
Код:
public static int textBox1;
А вот для comboBox или tabControl(какая вкладка последняя открыта) как будет выглядить код, так и не могу понять....
________________

-Отложи на послезавтра то что можешь сделать сегодня, и тогда у тебя появятся два свободных дня!
  Ответить с цитированием
Старый 23.04.2012, 11:52   #5
 Старший сержант
Аватар для Sinyss
 
Sinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака Норриса
Регистрация: 29.07.2011
Сообщений: 197
Популярность: 8989
Сказал(а) спасибо: 45
Поблагодарили 175 раз(а) в 139 сообщениях
Отправить сообщение для Sinyss с помощью Skype™
 
По умолчанию Re: Создание и сохранение файлов конфигурации

Получится:
public static CheckBox checkBox1;
public static TextBox textBox1;
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание файлов "Dll" JIoJI-PwNz Общение и обсуждение CrossFire 8 24.11.2011 17:42
[Помогите!] Сохранение Wolf-tmb Вопросы и ответы, обсуждения 5 29.10.2011 18:04
[Помогите!] Сохранение читов MaiorPain Общение и обсуждение, архив Point Blank 8 27.05.2010 12:49
[Packets]Сохранение у Npc doit2night Rising Force Online 24 25.12.2008 09:35

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 04:01.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net