Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Devastar
3 / 3 / 1
Регистрация: 30.09.2012
Сообщений: 123
#1

Как в секции INI файла узнать количество ключей ? - C#

04.03.2013, 10:11. Просмотров 1688. Ответов 5
Метки нет (Все метки)

Привет Всем. Снова я со своими делитантскими вопросами...
Собвственно, по заголовку и так понятен мой вопрос но задам еще раз.

Как из секции? допустим mysec узнать количество ключей ?
http://www.cyberforum.ru/csharp-net/thread578938.html
допустим в ini файле:

C++ (Qt)
1
2
3
4
5
6
7
[mysec]
mkey0=mvalue
mkey1=mvalue
mkey2=mvalue
mkey3=mvalue
mkey4=mvalue
mkey5=mvalue
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.03.2013, 10:11
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как в секции INI файла узнать количество ключей ? (C#):

Перебор ключей в INI-файлах
Приветствую, ребята. Подскажите пожалуйста, как перебрать ключи из определенной...

По данным из файла ini создать n-количество массивов
Здравствуйте. На форме динамически создается GroupBox и в него помещаются...

Как загрузить путь из ini или txt файла?
Есть кнопка с путём копирования: private void button1_Click(object sender,...

Нужно узнать количество определенных слов из файла
Допустим, есть .txt документ с текстом: "У меня есть собака. Моя собака самая...

Стирание секции appSettings из файла App.config
Доброго времени суток, форумчане. У меня появилась необходимость очищать...

5
Spectral-Owl
566 / 546 / 151
Регистрация: 29.06.2010
Сообщений: 1,572
Завершенные тесты: 1
04.03.2013, 16:30 #2
шарпы, насколько мне известно, не работают с ini, их вытеснили xml. решить данную проблему актуальнее всего было бы на делфях, а в шарпах - только ручной перебор. что-то похожее было, если найду выложу

Добавлено через 8 минут
я нашел свой старый код и ужаснулся =)
в двух словах - разбирал простенький ini файл, разбитый на два блока
[Common]
*
*
[Logon]
*
*
по аналогии думаю не тяжело будет доработать до собственных нужд

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
            string[] mostZones = text.Split('[');
 
            string[] allZonesCom = null;
            string[] allZonesLog = null;
 
 
            allZonesCom = mostZones[1].Split(']');
            allZonesLog = mostZones[2].Split(']');
 
            // mostZones[0] - пустая строчка
            // mostZones[1] - указание на зону Common
            // mostZones[2] - указание на зону Logon
 
            //обработка блока Comman========================//
            string[] CommonStrings = allZonesCom[1].Split('\n'); 
...
1
kolorotur
Эксперт .NET
9917 / 8302 / 2037
Регистрация: 17.09.2011
Сообщений: 14,285
04.03.2013, 16:40 #3
Используйте WinAPI функцию GetPrivateProfileSection.
Внизу страницы есть пример использования.
1
Devastar
3 / 3 / 1
Регистрация: 30.09.2012
Сообщений: 123
05.03.2013, 07:13  [ТС] #4
Spectral-Owl, kolorotur Ребят, спасибо Вам за ответы!!! Щас попробую сделать что нибудь

Добавлено через 13 часов 57 минут
kolorotur Если не сложно, сделайте пожалуйста примерчик с GetPrivateProfileSection в комментариях. На самом сайте, в примере, я что то не понимаю как...=\

И если можно, то пусть пример отобразит сколько ключей у секции mysec .

C++
1
2
3
4
5
6
7
[mysec]
mkey0=mvalue123
mkey1=mvalue321
mkey2=mvalue111
mkey3=mvalue222
mkey4=mvalue333
mkey5=mvalue132
0
kolorotur
Эксперт .NET
9917 / 8302 / 2037
Регистрация: 17.09.2011
Сообщений: 14,285
05.03.2013, 11:44 #5
Файл inifile.ini, находящийся в папке с приложением, сохранен в кодировке UTF8 без BOM:
Код
[mysec]
mkey0=mvalue123
mkey1=mvalue321
mkey2=mvalue111
mkey3=mvalue222
mkey4=mvalue333
mkey5=mvalue132
Код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
class Program
{
    [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
    static extern uint GetPrivateProfileSection(string lpAppName, IntPtr lpReturnedString, uint nSize, string lpFileName);
 
    static void Main(string[] args)
    {
        // Обязательно нужно использовать полный путь к файлу, иначе GetPrivateProfileSection будет искать файл относительно системной папки (C:\Windows, например).
        string file = Path.GetFullPath("inifile.ini");
        string section = "mysec";
 
        string[] keys;
        if (GetPrivateProfileSection(section, file, out keys))
            Console.WriteLine("{0} key(s) in section '{1}'", keys.Length, section);
        else
            Console.WriteLine("Error reading ini file.");
    }
 
    // Метод скопирован с [url]http://www.pinvoke.net/default.aspx/kernel32/GetPrivateProfileSection.html[/url] практически без изменений.
    static bool GetPrivateProfileSection(string appName, string fileName, out string[] section)
    {
        section = null;
 
        if (!System.IO.File.Exists(fileName))
            return false;
 
        const uint MAX_BUFFER = 32767;
 
        IntPtr pReturnedString = Marshal.AllocCoTaskMem((int)MAX_BUFFER * sizeof(char));
 
        uint bytesReturned = GetPrivateProfileSection(appName, pReturnedString, MAX_BUFFER, fileName);
 
        if ((bytesReturned == MAX_BUFFER - 2) || (bytesReturned == 0))
        {
            Marshal.FreeCoTaskMem(pReturnedString);
            return false;
        }
 
        //bytesReturned -1 to remove trailing \0
 
        // NOTE: Calling Marshal.PtrToStringAuto(pReturnedString) will
        //       result in only the first pair being returned
        string returnedString = Marshal.PtrToStringAuto(pReturnedString, (int)(bytesReturned - 1));
 
        section = returnedString.Split('\0');
 
        Marshal.FreeCoTaskMem(pReturnedString);
        return true;
    }
}
После выполнения метода массив keys заполнен парами ключ=значение.

Я как-то для своих нужд делал реализацию SettingsProvider'a для записи в ини файлы. Таким образом можно было работать в дизайнере настроек приложения — очень удобно.
Советую вам поступить так же.
1
Devastar
3 / 3 / 1
Регистрация: 30.09.2012
Сообщений: 123
05.03.2013, 17:17  [ТС] #6
kolorotur Благодарю Вас!!! Сейчас чуть попозже проверю Ваш пример!

Добавлено через 2 часа 12 минут
kolorotur Все отлично работает!!! Спасибо!!! =)
0
05.03.2013, 17:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.03.2013, 17:17
Привет! Вот еще темы с решениями:

Генерация и проверка на работоспособность ключей активации (регистрационных ключей)
Помогите придумать как можно осуществить сие деяние. Суть заключается в чем,...

Как узнать количество строк в таблице
Добрый вечер! Продолжаю задавать тупые вопросы по c# :) Как изменять...

Как узнать количество строк в матрице
Здравствуйте, подскажите пожалуйста, как узнать количество строк в матрице. Вот...

Как узнать количество строк в файле
как узнать количество строк в файле? допустим есть файл: 111 222 333 112...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru