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

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

12.07.2009, 19:41. Показов 10614. Ответов 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,893
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,893
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
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru