powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / работа с ini файлом
15 сообщений из 15, страница 1 из 1
работа с ini файлом
    #32332289
Luzin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите как на VC++ 6.0 считать все значения секций(можно одной секции) в ini файле.
Как считывать конкретное значение я знаю. Срочно надо.
...
Рейтинг: 0 / 0
работа с ini файлом
    #32332405
Shkurenko Alexander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Platform SDK:
The GetPrivateProfileSectionNames function retrieves the names of all sections in an initialization file.

Note This function is provided only for compatibility with 16-bit Windows-based applications. Applications should store initialization information in the registry.

Код: plaintext
1.
2.
3.
DWORD GetPrivateProfileSectionNames(
  LPTSTR lpszReturnBuffer,  // return buffer
  DWORD nSize,              // size of return buffer
  LPCTSTR lpFileName);      // initialization file name


Parameters
lpszReturnBuffer
[out] Pointer to a buffer that receives the section names associated with the named file. The buffer is filled with one or more null-terminated strings; the last string is followed by a second null character.
nSize
[in] Specifies the size, in TCHARs, of the buffer pointed to by the lpszReturnBuffer parameter.
lpFileName
[in] Pointer to a null-terminated string that specifies the name of the initialization file. If this parameter is NULL, the function searches the Win.ini file. If this parameter does not contain a full path to the file, the system searches for the file in the Windows directory.


The GetPrivateProfileSection function retrieves all the keys and values for the specified section of an initialization file.
Код: plaintext
1.
2.
3.
4.
DWORD GetPrivateProfileSection(
  LPCTSTR lpAppName,        // section name
  LPTSTR lpReturnedString,  // return buffer
  DWORD nSize,              // size of return buffer
  LPCTSTR lpFileName);      // initialization file name

Parameters
lpAppName
[in] Pointer to a null-terminated string specifying the name of the section in the initialization file.
lpReturnedString
[out] Pointer to a buffer that receives the key name and value pairs associated with the named section. The buffer is filled with one or more null-terminated strings; the last string is followed by a second null character.
nSize
[in] Specifies the size, in TCHARs, of the buffer pointed to by the lpReturnedString parameter.
Windows 95/98/Me: The maximum buffer size is 32,767 characters.

lpFileName
[in] Pointer to a null-terminated string that specifies the name of the initialization file. If this parameter does not contain a full path to the file, the system searches for the file in the Windows directory.


Ну и пример, без всяких проверок
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
#include <windows.h>
#include <tchar.h>
#include <iostream>

int main()
{
	TCHAR ini_file[] = _T( "C:\\Temp\\test.ini" );
	TCHAR keys[MAX_PATH];
	TCHAR snames[MAX_PATH];

	GetPrivateProfileSectionNames(snames, MAX_PATH, ini_file);
	for (TCHAR *psname = snames; *psname !=  0 ; psname += lstrlen(psname) +  1 )
	{
		std::cout << psname << '\n';
		GetPrivateProfileSection(psname, keys, MAX_PATH, ini_file);
		for (TCHAR *pkey = keys; *pkey !=  0 ; pkey += lstrlen(pkey) +  1 )
			std::cout << pkey << '\n';
	}
	return  0 ;
}
...
Рейтинг: 0 / 0
работа с ini файлом
    #32332419
Shkurenko Alexander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, этот вариант не будет работать с UNICODE. Замени std::cout на std::wcout или воспользуйся макросом _tprintf.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
работа с ini файлом
    #34114298
Lepaj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго всем времени стуток.

Ситуация следующая, я написал программу на Си и возникла потребность считывать в нее параметры из ini файла. Так как Си работает со строками как с массивами, считывать файл по символьно или построчно не подходит, так как в дальнейшем прийдется их анализировать.

Слышал, что есть библиотека по Си, которая работает с ini файлами. Не охото изобретать велосипед. Может кто подскажет, есть такая библиотека, и если есть, то какие функции в ней реализованы?

Содержание файла :

IN_PORT = 10100
REMOTE_PORT = 10200
REMOTE_IP = 192.168.250.126
TIME_OUT = 5000

Возможно есть какие то другие функици, для того что бы считать данный файл, получив значения числовых переменных?
...
Рейтинг: 0 / 0
работа с ini файлом
    #34114499
pandrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
посмотри в справке классы TRegIniFile, TRegistry
...
Рейтинг: 0 / 0
работа с ini файлом
    #34114541
Lepaj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pandrewпосмотри в справке классы TRegIniFile, TRegistry

Так это в билдере, а мне нада для Си (обычный, не Си++)...
Может есть какой нибудь заголовочный файл? Может кто сталкивался?
...
Рейтинг: 0 / 0
работа с ini файлом
    #34114904
pandrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LepajТак это в билдере, а мне нада для Си
тогда здесь
...
Рейтинг: 0 / 0
работа с ini файлом
    #34115503
Lepaj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pandrew LepajТак это в билдере, а мне нада для Си
тогда здесь

Я имел в виду немного не это, просто думал может есть какая нибудь библиотека, в которой описана функция, которая при считывание строки определенного вида возвращала автоматически разбивала бы ее на параметры, но похоже прийдется анализировать строки и выдирать из них требуемую информацию.

Чтож, все равно спасибо.
...
Рейтинг: 0 / 0
работа с ini файлом
    #34115575
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lepaj pandrew LepajТак это в билдере, а мне нада для Си
тогда здесь

Я имел в виду немного не это, просто думал может есть какая нибудь библиотека, в которой описана функция, которая при считывание строки определенного вида возвращала автоматически разбивала бы ее на параметры, но похоже прийдется анализировать строки и выдирать из них требуемую информацию.

Чтож, все равно спасибо.

А чем не устраивает scanf ?
...
Рейтинг: 0 / 0
работа с ini файлом
    #34115663
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
работа с ini файлом
    #34115762
Lepaj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat-А чем не устраивает scanf ?

Я не понял ее синтаксиз, ей можно считать строку

IN_PORT = 10100
REMOTE_PORT = 10200
REMOTE_IP = 192.168.250.126
TIME_OUT = 5000

а потом не анализируя загнать 10100 в числовую переменную?

А вообще я реализовывал считывание через - fgets(str1, 10, fp); и переводил в число.

Но тогда в файле хранились только числовые значения,

10100
10200
192.168.250.126
5000

но начальник сказал, для юзера не удобно, так что переделай в вид приведенный выше :(
...
Рейтинг: 0 / 0
работа с ini файлом
    #34115772
Lepaj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmo http://www.yandex.ru/yandsearch?rpt=rad&text=library+ini+files

Спасибо, что то я не додумался на английском написать.
...
Рейтинг: 0 / 0
работа с ini файлом
    #34116262
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fscanf(fp, "%s = %d\n", str1, &myint); - считывание числовых значений
fscanf(fp, "%s = %s\n", str1, str2); - считывание строковых
только надо строго за пробелами следить.
в str1 идёт имя параметра и там должно быть достаточно места для этого.
...
Рейтинг: 0 / 0
работа с ini файлом
    #34116448
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lepaj onstat-А чем не устраивает scanf ?

Я не понял ее синтаксиз, ей можно считать строку

IN_PORT = 10100
REMOTE_PORT = 10200
REMOTE_IP = 192.168.250.126
TIME_OUT = 5000

а потом не анализируя загнать 10100 в числовую переменную?

А вообще я реализовывал считывание через - fgets(str1, 10, fp); и переводил в число.

Но тогда в файле хранились только числовые значения,

10100
10200
192.168.250.126
5000

но начальник сказал, для юзера не удобно, так что переделай в вид приведенный выше :(

Конечно можно
для целых это выглядит приблизительно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
char parname[ 100 ];
int   parvalue= 0 ;

int res=fscanf(f, "%99[^=]%*c%d%*[^\n]%*c", &parname[ 0 ],  &parvalue);
// описание используемого формата
//   %99[^=] - чтение 99 символов пока не встретися '=' 
//   %*c   -     пропусук '='
//   %d    -   чтение  int
//   %*[^\n] %*c  - перевод позиции на начало следующей строки 

if ( res != 2   ) // строка файла не соответствует формату  "параметр = значение"
{
.......
}

Для адресов, зависит от того в каких переменных вы их хотите видеть.

ps В имени параметра будут завершающие пробелы если они есть в файле
перед '='
...
Рейтинг: 0 / 0
работа с ini файлом
    #34118745
Lepaj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmo и onstat - спасибо, это то что нужно :) Просто в документации, что у меня есть fscanf коряво описан :(
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / работа с ini файлом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]