Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/56: Рейтинг темы: голосов - 56, средняя оценка - 4.66
 Аватар для yurembo
10 / 10 / 5
Регистрация: 04.07.2009
Сообщений: 112

Передача параметров из ini-файла

12.07.2009, 19:41. Показов 10725. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется некий ini файл и проект VС++ . Например ини-файл выглядит так:

tets.ini
+============================+
[global]
sectionCount = 4
[section1]
Path= c:/folder1
path_to_compare = d:/backUp/
file_mask =*.*

[section2]
Path= c:/folder2
path_to_compare = d:/backUp/
file_mask =*.avi

[section3]
Path= c:/folder3
path_to_compare = d:/backUp/
file_mask =*.doc
+============================+


как в с++ передать все эти параметры???
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.07.2009, 19:41
Ответы с готовыми решениями:

Чтение параметров из .ini файла
Добрый день, я хочу сделать рпг, и хочу ещё сделать так, чтоб читалось ведённое в WindowTitle = "имя" Например Юзер изменит...

Чтение параметров ini файла в UTF-8
Здравствуйте. Требуется читать параметры ini файла, делаю это так: private const int SIZE = 1024; private static extern...

Чтение и вывод на экран параметров и их значений из INI файла
Создать программу для чтения и вывода на экран параметров и их значений из INI файла. Данные из файла необходимо выводить в виде таблицы. ...

8
 Аватар для Gravity
577 / 571 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
12.07.2009, 19:48
Прочитать файл в буфер и там уже работать с параметрами.
0
 Аватар для yurembo
10 / 10 / 5
Регистрация: 04.07.2009
Сообщений: 112
12.07.2009, 20:46  [ТС]
ммм.. а как это сделать?)) просто я никогда не работал с ini)
0
MCSD: APP BUILDER
 Аватар для IT_Exp
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
12.07.2009, 21:51
GetPrivateProfile*
0
 Аватар для mikityak
617 / 22 / 0
Регистрация: 30.09.2007
Сообщений: 357
13.07.2009, 17:03
кусок...

Code
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
bool FillData(HINSTANCE hInst)
{
    static char lpEXEName[MAX_PATH], lpININame[MAX_PATH];
 
    /* ïîëó÷àåì ïîëíûé àäðåñ ê íàøåé ïðîãðàììå */
    GetModuleFileName(hInst, lpEXEName, MAX_PATH);
 
    /* à åòîé ìàíèïóëÿöûåé ïîëó÷àåì ïàïêó ê íàøåé ïðîãðàìå */
    strncat(lpININame, lpEXEName, strlen(lpEXEName) - strlen("HiddenProcess.exe"));
 
    /* íó à çäåñü èìååì ïîëíûé àäðåñ ê ôàéëó íàñòðîéêè ñ êîòîðîãî áóäåì áðàòü äàíûå */
    strcat(lpININame, "HiddenProcess.ini");
 
    /* çàïîëíÿåì "szUrlPath" àäðåñîì ê 
    ôàéëó êîòîðûé ñîáèðàåìñÿ êà÷àòü */
    GetPrivateProfileString
    (
        "Options", 
        "UrlPath", 
         NULL, 
         szUrlPath, 
         MAX_PATH, 
         lpININame
    );
 
    /* çàïîëíÿåì "szFileSavePath" èìåíåì 
    ôàéëà êîòîðûé ñîáèðàåìñÿ ñîõðàíÿòü */
    GetPrivateProfileString
    (
        "Options", 
        "SavePath", 
         NULL, 
         szFileSavePath, 
         MAX_PATH, 
         lpININame
    );
 
    /* çàïîëíÿåì "szMsgBox" çíà÷åíèåì
    TRUE èëè FALSE øòîáû çíàòü âûâàäèòü 
    ðåçóëüòàò ðàáîòû èëè íåò*/
    iMsgBox = GetPrivateProfileInt
    (
        "Options", 
        "ShowMegBox", 
         NULL, 
         lpININame
    );
 
    return TRUE;
}
0
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
14.07.2009, 10:53
Нужно использовать функции GetPrivateProfileInt() если нужно прочесть целое число и GetPrivateProfileString() если нужно прочесть строку.
Сам ини файл нужно представлять так:
Code
1
2
3
4
5
[section]
key=значение
      .
      .
      .
На примере первой функции, вот ее прототип:
C++
1
2
3
4
5
6
7
UINT GetPrivateProfileInt(
    LPCTSTR lpAppName,  // адрес строки с названием section (без [ ])
    LPCTSTR lpKeyName,  // адрес строки с именем key
    INT nDefault,   // это значение вернет функция если такого key
            // нет в данной section
    LPCTSTR lpFileName  // адрес строки с именем ини файла
   );
О последнем параметре нужно отметить отдельно, что там всегда должен быть абсолютный путь (в формате, например, "c:\dir\file.ini"). Если в этом параметре относительное имя файла (т.е. file.ini), то этот файл будет искаться в системной папке винды.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <windows.h>
#include <stdio.h>
 
int main(void)
{
    int  i;
    char stroka[255];
 
    // целое число
    i = GetPrivateProfileInt("global", "sectionCount", 0, "d:\\test.ini");
    // строка
    GetPrivateProfileString("section1", "Path", NULL, stroka,
        sizeof(stroka), "d:\\test.ini");
 
    printf("%d %s\n", i, stroka);
 
    return 0;
}
2
 Аватар для yurembo
10 / 10 / 5
Регистрация: 04.07.2009
Сообщений: 112
14.07.2009, 15:34  [ТС]
чуток додал L для конвертации char в LPCTSTR :

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
 
int main(void)
{
        int      i;
        char str[255];
 
        // целое число
        i = GetPrivateProfileInt(L"global", L"sectionCount", 0, L"d:\\test.ini");
        // строка
        GetPrivateProfileString(L"section1", L"Path", NULL, LPWSTR(str), sizeof(str), L"d:\\test.ini");
 
        printf("%d %s\n", i, str);
 getch();
        return 0;
        
}
но, GetPrivateProfileString - выдает только первый символ с ини файла...
1
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
15.07.2009, 08:49
Цитата Сообщение от yurembo Посмотреть сообщение
но, GetPrivateProfileString - выдает только первый символ с ини файла...
Под какой VS проверяли?

Чем Вас char не устраивает?

В WinAPI существует разделение функций по типу строк, с которыми они работают, ANSI Char - (1 символ в них - 1 байт) и WideChar (1 символ - 2 байта). В последнем можно кодировать такие большие алфавиты, как, например, китайский, но сейчас не об этом. Т.е. любая API функция имеет две версии, различаются постфиксом в имени A - ansi, W - widechar.

На бинарном уровне различие между ansi и widechar такие: строка "Help" в ANSI будет состоять из символов 'H', 'e', 'l', 'p', тем временем, как widechar - 'H', '\0', 'e', '\0', 'l', '\0', 'p', '\0' - т.е. как не странно, widechar в 2 раза больше.

Рассмотрим что произошло в конкретном случае.

У Вас str объявлена как массив из 255 однобайтовых символов.
char str[255];
А когда Вы вызываете GetPrivateProfileString(), то в нем приводите тип str к 2-x байтовому символу.
LPWSTR(str)
А компилятор, по этому параметру вызывает уже не ANSI char версию GetPrivateProfileString(), а WideChar версию этой функции.
Теперь когда Вы подаете на вывод строку, используется старая функция из библиотеки ANSI С, которая о WideChar знать не знает. str у нас char, приведения типов не требуется.
printf("%d %s\n", i, str);
А как известно, окончанием строки в C является символ '\0', а после вызова WideChar версии функции в нашем буфере их предостаточно.

Если нужно работать с WideChar, то вот так изменится наш пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <windows.h>
#include <wchar.h>
 
int main(void)
{
    int     i;
    wchar_t str[255];
 
    // целое число
    i = GetPrivateProfileIntW(L"global", L"sectionCount", 0, L"d:\\test.ini");
    // строка
    GetPrivateProfileStringW(L"section1", L"Path", NULL, str, sizeof(str), L"d:\\test.ini");
 
    wprintf(L"%d %s\n", i, str);
    getch();
    return 0;
}
2
 Аватар для yurembo
10 / 10 / 5
Регистрация: 04.07.2009
Сообщений: 112
15.07.2009, 16:37  [ТС]
Цитата Сообщение от xitNightMare Посмотреть сообщение
Под какой VS проверяли?
VS 2008

Цитата Сообщение от xitNightMare Посмотреть сообщение
Чем Вас char не устраивает?
выдает ошибку о том что невозможно преобразовать Char в LPCSTR

Цитата Сообщение от xitNightMare Посмотреть сообщение
Если нужно работать с WideChar, то вот так изменится наш пример:
...
ок, спс, попробую)

Добавлено через 17 минут 6 секунд
да, проверил, все пашет, спс))
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.07.2009, 16:37
Помогаю со студенческими работами здесь

Передача параметров из файла
&lt;?php include(&quot;size.inc&quot;); ?&gt; &lt;img src=&quot;qwe.jpg&quot; height=&quot;&lt;?php echo HEIGHT?&gt;&quot; width=&quot;&lt;?php echo WIDTH?&gt;&quot; /&gt; Собственно сам код ...

Передача параметров в Скрипт из HTML файла
Здравствуйте. Сразу перейду к вопросу: Я столкнулся с проблемой. Я должен вызвать функцию из события onMouseOver через setInterval: ...

Считывание из файла списка процессов, их запуск и передача им параметров
Написать две программы: 1) Программа TASK1, которая считывает из файла TASK.TXT имена процессов и запускает их с соответствующими...

Передача параметров через список параметров формы
Hi all! У кого есть опыт передачи параметров через заголовочный список параметров формы? Желетельно пример записи. Заранее...

Список параметров в notes.ini
Приветствую, коллеги. А есть ли у кого список всех параметров, используемых в notes.ini? И отдельно интересует серверный...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru