Приведите пример работы с XML файлом в качестве INI файла?
От: Аноним  
Дата: 19.11.02 09:59
Оценка:
Друзья,раньше в своих прогарммах на Deplhi или VB я использовал для хранения настроек INI файлы,в С# насколько я знаю в качестве такого лучше использовать XML файл.
Pls,привидите пример работы с работы с настройками в XML файле на C#?
Re: Приведите пример работы с XML файлом в качестве INI фай
От: Lloyd Россия  
Дата: 19.11.02 10:11
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Друзья,раньше в своих прогарммах на Deplhi или VB я использовал для хранения настроек INI файлы,в С# насколько я знаю в качестве такого лучше использовать XML файл.

А>Pls,привидите пример работы с работы с настройками в XML файле на C#?

Очень просто. Пусть ваше приложение называется программа.exe. Создаете рядом файл с названием программа.exe.config, саписываете туде следующий кусочек xml-я


<configuration>
    <appSettings>
        <add key="Мой ключ" value="Мое значение"/>
    </appSettings>
</configuration>



и в приложении получаете значение параметра через

ConfigurationSettings.AppSettings["Мой ключ"]



А вообще все это и многое другое можно найти здесь:
ms-help://MS.MSDNVS/cpguide/html/cpconconfiguringnetframeworkapplications.htm
Re: Приведите пример работы с XML файлом в качестве INI фай
От: slv Украина  
Дата: 19.11.02 10:43
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Друзья,раньше в своих прогарммах на Deplhi или VB я использовал для хранения настроек INI файлы,в С# насколько я знаю в качестве такого лучше использовать XML файл.

А>Pls,привидите пример работы с работы с настройками в XML файле на C#?

В статье "GUI-приложение на .Net за 0x4EC секунд" приведен пример записи и считывания
в/из файла настроек. Ссылку мне искать ломно, найдеш и сам.
Re[2]: Приведите пример работы с XML файлом в качестве INI
От: MikaRSDN Soukhov Stock#
Дата: 19.11.02 12:15
Оценка:
Здравствуйте, Lloyd, Вы писали:

А как сделать что бы студия сама такой файл генерила Помоему там надо сначала файл app.config создать А потом студия уже сама все делает
Re[3]: Приведите пример работы с XML файлом в качестве INI
От: Lloyd Россия  
Дата: 19.11.02 12:20
Оценка:
Здравствуйте, MikaRSDN Soukhov, Вы писали:


Не, автоматического способа я не знаю. Да и нужен ли он. И так все достаточно просто.
Re: Приведите пример работы с XML файлом в качестве INI фай
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 19.11.02 17:52
Оценка:
Здравствуйте <Аноним>, Вы писали:

А>Pls,привидите пример работы с работы с настройками в XML файле на C#?


Примерчик тебе? Ща приведу.
Это из Януса, конфиг евойный.

using System;
using System.IO;
using System.Xml.Serialization;
using System.Drawing;
using System.ComponentModel;
using System.Collections;

namespace RSDN.Janus
{
        /// <summary>
        /// Кофигурация
        /// </summary>
        public struct FormBounds
        {
                public int X;
                public int Y;
                public int Width;
                public int Height;
                public FormBounds(int x,int y,int w,int h)
                {
                        X = x;
                        Y = y;
                        Width = w;
                        Height = h;
                }
                [XmlIgnore]
                public Rectangle Bounds
                {
                        get
                        {
                                return new Rectangle(X,Y,Width,Height);
                        }
                        set
                        {
                                X = value.X;
                                Y = value.Y;
                                Width = value.Width;
                                Height = value.Height;
                        }
                }
        }

        public enum SizeToolBar
        {
                Size16,
                Size24
        }

        [Flags]
        public enum ChangeAction
        {
                NoAction = 0,
                Refresh = 1,
                Restart = 2
        }

        [AttributeUsage(AttributeTargets.Property)]
        public class ChangePropertyAttribute : System.Attribute 
        {
                private ChangeAction _action;

                public ChangePropertyAttribute( ChangeAction action)
                {
                        _action = action;
                }

                public virtual ChangeAction Action
                {
                        get { return _action; }      
                }

        }

        public class Config
        {

                private static object lockFlag = new object();
                private static Config instance;
                [XmlIgnore]
                public static Config Instance
                {
                        get
                        {
                                lock(lockFlag) 
                                {
                                        if(instance == null)
                                        {     
                                                try
                                                {
                                                        using(FileStream fs = new FileStream(LocalUser.GetDatabasePath()+"\\config.xml",FileMode.Open))
                                                        {
                                                                System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(Config));
                                                                instance = (Config)xs.Deserialize(fs);
                                                        }
                                                }
                                                catch(Exception e)
                                                {
                                                        System.Windows.Forms.MessageBox.Show(e.Message);
                                                        instance = new Config();
                                                }
                                        }
                                }
                                return instance;
                        }
                }

                private SizeToolBar imgToolBar = SizeToolBar.Size24;
                [DisplayName("Размер иконок"),
                        Description("Размер иконок на тулбаре. (Требует перезапуска приложения)"),
                        Category("Общие"),
                        ChangeProperty( ChangeAction.Restart)]
                public SizeToolBar SizeImageToolBar
                {
                        get{return imgToolBar;}
                        set{imgToolBar = value;}
                }

                private bool showFullForumNames = true;
                [DisplayName("Полные имена форумов"),
                        Description("Показывать полные наименования форумов"),
                        Category("Форумы"),
                        ChangeProperty( ChangeAction.Refresh)]
                public bool ShowFullForumNames
                {
                        get{return showFullForumNames;}
                        set{showFullForumNames = value;}
                }

                private int markMessageReadInterval = 2000;
                [DisplayName("Интервал установки сообщения прочитанным"),
                        Description("Интервал в миллисекундах, после которого открытое сообщение помечается как прочитанное"),
                        Category("Форумы")]
                public int MarkMessageReadInterval
                {
                        get{return markMessageReadInterval;}
                        set{markMessageReadInterval = value;}
                }

                public bool ShowMessagesFlat = false;

                public string Login = "";

                public string EncodedPassword = "";

                public FormBounds MainFormBounds = new FormBounds(0,0,800,600);
                public FormBounds WriteMessageFormBounds = new FormBounds(0,0,640,480);
                public int ForumSplitterPosition = 200;

                private string tagLine = "... << @@appname @@version @@subversion >>";
                [DisplayName("Строка подписи клиента"),
                        Description(@"Строка, которую клиент будет добавлять в конец каждого прочитанного сообщения для указания
                                способа которым было написано это сообщение. Доступны следующие макросы:\n
                                @@appname - имя клиента;\n
                                @@version - версия клиента;\n
                                @@subversion - подверсия клиента;\n 
                                @@build - билд клиента;\n
                                @@copyright - строка копирайта;\n
                                @@nick - ваш ник;\n
                                @@osname - название ОС;\n
                                @@osversion = версия ОС;"),
                        Category("Форумы")]
                public string TagLine
                {
                        get{return tagLine;}
                        set{tagLine = value;}
                }

                private bool msgListGridLines = true;
                [DisplayName("Линии сетки в гриде"),
                        Description("Видимость линий сетки в дереве сообщений сообщений"),
                        Category("Форумы"),
                        ChangeProperty( ChangeAction.Refresh)]
                public bool MsgListGridLines
                {
                        get{return msgListGridLines;}
                        set{msgListGridLines = value;}
                }

                public int[] ForumColumnOrder = new int[]{0,1,2,3,4};
                public int[] ForumColumnWidth = new int[]{320,100,50,35,80};

                public ForumFormState ForumFormState = ForumFormState.Normal;

                private bool downloadUsers = true;
                [DisplayName("Локальная база пользователей"),
                        Description("Создавать локальную копию базы пользователей (увеличивает трафик)"),
                        Category("Пользователи rsdn.ru")]
                public bool DownloadUsers
                {
                        get{return downloadUsers;}
                        set{downloadUsers = value;}
                }
                private int maxUsersPerSession = -1;
                [DisplayName("Пользователей в сессии"),
                        Description("Максимальное количество пользователей, забираемое за один раз"),
                        Category("Пользователи rsdn.ru")]
                public int MaxUsersPerSession
                {
                        get{return maxUsersPerSession;}
                        set{maxUsersPerSession = value;}
                }

                [XmlIgnore]
                public Hashtable lastReadMessage = new Hashtable();
                //Для сериализации
                public struct PositionEntry
                {
                        public int forumId;
                        public int msgId;
                }
                [Browsable(false)]
                public PositionEntry[] serLastReadMessage
                {
                        get
                        {
                                PositionEntry[] pea = new PositionEntry[lastReadMessage.Count];
                                int i = 0;
                                foreach(DictionaryEntry de in lastReadMessage)
                                {
                                        pea[i].forumId = (int)de.Key;
                                        pea[i].msgId = (int)de.Value;
                                        i++;
                                }
                                return pea;
                        }
                        set
                        {
                                lastReadMessage.Clear();
                                foreach(PositionEntry pe in value)
                                {
                                        lastReadMessage.Add(pe.forumId,pe.msgId);
                                }
                        }
                }

                private int gridIndent = 5;
                [DisplayName("Размер отступа в дереве"),
                        Description("Отступ ответов в дереве сообщений, пикселей"),
                        Category("Форумы")]
                public int GridIndent
                {
                        get {return gridIndent;}
                        set {gridIndent = value;}
                }

                public byte[] dockingLayout = null;

                public byte[] customShortcuts = null;

                private bool minimizeToTray = true;
                [DisplayName("Минимизировать в трей"),
                        Description("Сворачивать окно в трей"),
                        Category("Общие")]
                public bool MinimizeToTray
                {
                        get {return minimizeToTray;}
                        set {minimizeToTray = value;}
                }

                private bool confirmClosing = true;
                [DisplayName("Предупреждать при выходе"),
                        Description("Показывать окно с предупреждением при выходе"),
                        Category("Общие")]
                public bool ConfirmClosing
                {
                        get {return confirmClosing;}
                        set {confirmClosing = value;}
                }

                private int httpTimeout = 100000;
                [DisplayName("Таймаут соединения"),
                        Description("Время ожидания отклика от сервера, миллисекунд"),
                        Category("Синхронизация")]
                public int HttpTimeout
                {
                        get {return httpTimeout;}
                        set {httpTimeout = value;}
                }

                private int retriesCount = 3;
                [DisplayName("Количество попыток соединения"),
                        Description("Количество попыток, которые будут предприниматься для связи с сервером при проблемах с соединением"),
                        Category("Синхронизация")]
                public int RetriesCount
                {
                        get {return retriesCount;}
                        set {retriesCount = value;}
                }

                private bool showSplash = true;
                [DisplayName("Показывать заставку"),
                        Description("Показывать заставку при старте приложения"),
                        Category("Общие")]
                public bool ShowSplash
                {
                        get {return showSplash;}
                        set {showSplash = value;}
                }

                public int outboxSplitterPosition = 200;

                private bool autoSync = false;
                [DisplayName("Автосинхронизация"),
                        Description("Автоматически запускать синхронизацию через указанный промежуток времени"),
                        Category("Синхронизация"),
                        ChangeProperty( ChangeAction.Refresh)]
                public bool AutoSync
                {
                        get {return autoSync;}
                        set {autoSync = value;}
                }

                private int autoSyncInterval = 300;
                [DisplayName("Интервал автосинхронизации"),
                        Description("Интервал, по прошествии которого будут производиться попытки автосинхронизации, секунд"),
                        Category("Синхронизация"),
                        ChangeProperty( ChangeAction.Refresh)]
                public int AutoSyncInterval
                {
                        get {return autoSyncInterval;}
                        set {autoSyncInterval = value;}
                }

                public Config()
                {
                        
                }

                public void Save()
                {
                        using(FileStream fs = new FileStream(LocalUser.GetDatabasePath()+"\\config.xml",FileMode.Create))
                        {
                                System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(Config));
                                xs.Serialize(fs,instance);
                        }
                }

                public static void Reload()
                {
                        instance = null;
                }

                public static Config GetClone()
                {
                        return (Config)instance.MemberwiseClone();
                }

                public static void NewConfig(Config cfg)
                {
                        instance = cfg;
                }

        }
}


Если будет интересно подробнее (там к примеру есть гуевый редактор этих самых настроек, причем автоматический, атрибуты это для него) то с CVS можешь забрать полные исходники.
... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.