Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Использование INI файлов


Автор: Ordenador 10.5.2008, 17:15
Мне требуется написать на VS C# в довольно краткие сроки адресную книгу. Когда думал о хранении файлов, то выбрал INI файлы. Во первых так удобнее хранить:
Код

[тут ФИО]
Телефон=909-111-22-33
Адрес=У дедушки на деревне

Во вторых когда то давно реализовывал подобное на Delphi (и вполне успешно).

Вопросов два:
1. Может все же есть другие оптимальные пути?
2. Если все же использовать INI файлы - как проще всего (и очень желательно без дополнительных библиотек) добавлять, удалять и редактировать INI?

Искал на наших и зарубежных форумах - подходящего решения не нашел (многое для меня еще слишком сложно)

Автор: Fyrklod 10.5.2008, 18:21
1)  есть другие пути.. причем в шарпе вместо ИНИ именно они используются.. обычный XML ..  и структура там задается также как и в том же ИНИ
2) на сколько я по форуму и по разговору с некоторыми людьми понял, так в шарпе походу уже вообще убралась работа с ИНИ.. хочешь его использовать, пиши свои методы и т.д. короче стандартных нет...

Автор: Ordenador 10.5.2008, 18:24
Fyrklod
Значит либо дополнительные библиотеки, либо XML...
А если использовать XML, есть не очень сложный алгоритм записи\удаления\редактирования? Я начинающий, честно говоря сложно ориентироваться.

Автор: Fyrklod 10.5.2008, 18:38
в том то и дело что ничего сложного при работе с ним нет практически как и с ИНИ в Билдере

Пример записи
Код

 XmlTextWriter xml = new XmlTextWriter(NameFile, Кодировка);
 xml.WriteStartDocument();
 xml.WriteStartElement("тут ФИО");
 xml.WriteStartElement("Телефон");
 xml.WriteString(telef);
 xml.WriteEndElement();
 xml.WriteEndElement();
xml.Close();

Автор: source777 10.5.2008, 19:31
Если не нужен доступ к файлу адресной книги не из программы, то проще и эффективнее всего использовать сериализацию...
Код

    [Serializable]
    struct PersonInfo
    {
        string Address;
        string Phone;
        public PersonInfo(string Address, string Phone)
        {
            this.Address = Address;
            this.Phone = Phone;
        }
        public override string ToString()
        {
            return String.Format("Адрес: {0}\nТелефон: {1}", Address, Phone);
        }
    }

Код

            Dictionary<string, PersonInfo> addresses = new Dictionary<string, PersonInfo>();
            addresses.Add("Иванов Иван Иванович", new PersonInfo("г.Москва, ул.Королёва, д.12", "572-12-45"));
            //...
            FileStream fs = new FileStream("Address.book", FileMode.OpenOrCreate);
            var bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
            bf.Serialize(fs, addresses);
            fs.Close();
            addresses.Clear();
            //....
            fs = new FileStream("Address.book", FileMode.Open);
            bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
            addresses = (Dictionary<string, PersonInfo>)bf.Deserialize(fs);
            fs.Close();
            MessageBox.Show(addresses["Иванов Иван Иванович"].ToString());

Автор: Ordenador 10.5.2008, 19:42
source777
При сериализации все хранится внутри файла?
Где можно найти статьи, желательно на русском, чтобы не закидывать тут всех вопросами, о том что это такое и как это использовать?
За пример большое спасибо, развернутый и ясный.

Fyrklod
Насколько я понимаю для использования данного кода требуется в программе где то обозначить, что я буду пользоваться XML. Где это сделать? Без этого код говорит, что XmlTextWriter это чтото не его smile
И где можно найти еще примеры использования? В частности как потом читать эти файлы?

Автор: -Mikle- 10.5.2008, 20:16
Цитата(Ordenador @  10.5.2008,  22:42 Найти цитируемый пост)
Без этого код говорит, что XmlTextWriter это чтото не его 


поставь:
Код

using System.Xml;


или пиши всегда полное имя класса System.Xml.XmlTextWriter

Автор: Ordenador 10.5.2008, 20:44
-Mikle-
Спасибо. Понял принцип.

С записью в XML разобрался, реализовал все так:
Код

XmlTextWriter writer = new XmlTextWriter("address.xml", null);
writer.WriteStartDocument();
writer.WriteStartElement("Иванов Иван Иванович");
writer.WriteStartElement("Телефон");
writer.WriteString("111-11-11");
writer.WriteEndElement();
writer.WriteEndElement();
writer.Close();

Еще раз спасибо Fyrklod

Пытаюсь сейчас найти, как вывести из XML только фамилии. Я так понимаю, что:
Код

<Иванов Иван Иванович>
...
</Иванов Иван Иванович>

и собственно
Код

<Телефон>111-11-11</Телефон>

должны иметь какие то типы или другие идентификаторы...

Автор: source777 11.5.2008, 00:39
Цитата(Ordenador @  10.5.2008,  19:42 Найти цитируемый пост)
При сериализации все хранится внутри файла?
По умолчанию да, но в принципе можно указать атрибут [NonSerialized] для вычисляемых полей, чтобы их не сохранять...

Цитата(Ordenador @  10.5.2008,  19:42 Найти цитируемый пост)
Где можно найти статьи, желательно на русском, чтобы не закидывать тут всех вопросами, о том что это такое и как это использовать?
Честно говоря, не знаю, мне MSDN хватает, но он на английском... а на русском поищи в Google...


Цитата(Ordenador @  10.5.2008,  20:44 Найти цитируемый пост)
должны иметь какие то типы или другие идентификаторы
Идентификаторы делай на английском и без пробелов...

Автор: Veitmen 11.5.2008, 15:13
http://www.shareinfo.ru/nini
Простой и легкий.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)