Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/22: Рейтинг темы: голосов - 22, средняя оценка - 4.59
 Аватар для Devastar
3 / 3 / 0
Регистрация: 30.09.2012
Сообщений: 123

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

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

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

Как из секции? допустим mysec узнать количество ключей ?
допустим в ini файле:

C++ (Qt)
1
2
3
4
5
6
7
[mysec]
mkey0=mvalue
mkey1=mvalue
mkey2=mvalue
mkey3=mvalue
mkey4=mvalue
mkey5=mvalue
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.03.2013, 10:11
Ответы с готовыми решениями:

Работа с ini.Как в секции узнать количество ключей?
Как в секции узнать количество ключей?

Как подсчитать количество КЛЮЧЕЙ в секции Ини-файла?
Вот как подсчитать количество секций знаю, прочитать в переменную типа StringListи применить свойство Count, но мне нужно выхватить именно...

Как данные из секции INi-файла считать в ListBox?
Как данные из секции INi-файла считать в ListBox? Как считать данные в переменную я знаю, а как потом все это перенести в ListBox? Чтобы...

5
 Аватар для Spectral-Owl
608 / 583 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
04.03.2013, 16:30
шарпы, насколько мне известно, не работают с 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
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
04.03.2013, 16:40
Используйте WinAPI функцию GetPrivateProfileSection.
Внизу страницы есть пример использования.
1
 Аватар для Devastar
3 / 3 / 0
Регистрация: 30.09.2012
Сообщений: 123
05.03.2013, 07:13  [ТС]
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
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
05.03.2013, 11:44
Файл inifile.ini, находящийся в папке с приложением, сохранен в кодировке UTF8 без BOM:
Code
1
2
3
4
5
6
7
[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 / 0
Регистрация: 30.09.2012
Сообщений: 123
05.03.2013, 17:17  [ТС]
kolorotur Благодарю Вас!!! Сейчас чуть попозже проверю Ваш пример!

Добавлено через 2 часа 12 минут
kolorotur Все отлично работает!!! Спасибо!!! =)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.03.2013, 17:17
Помогаю со студенческими работами здесь

Очистка секции ini файла
Как мне программно очистить какую либо секцию ini файла (например 'form1' 'z3' ?)

Подсчёт записей в секции ini-файла
Как можно подсчитать количество записей из ini-файла? Например, у меня в ini-файле хранятся названия плейлистов, нужно вставить новый...

Сохранить нумерацию секций .ini файла после удаления произвольной секции
всем доброго времени суток. суть проблемы: есть файл .ini key=text1 key=text2 key=text3 нужно удалить , например ...

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

Работа с ini файлом: как получить все секции
Проблема в следующем: Нашел api для работы с ini, нашел нужные мне функции: GetPrivateProfileSectionNames - получить имена всех...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru