INI файлы Topic is solved

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
midisa
Earned some good credits
Earned some good credits
Posts: 113
Joined: Tue Jun 22, 2010 4:15 pm
Contact:

Post by midisa » Mon Aug 16, 2010 12:55 pm

Mojo wrote:
midisa wrote:Я скопировал ваш код:



wxString wsFile( wxT("conf.ini") );
wxFileConfig *pConfig = new wxFileConfig(
wxEmptyString, // app name
wxEmptyString, // vendor name
wsFile, //_T("conf.ini"),
wxEmptyString,
wxCONFIG_USE_LOCAL_FILE | wxCONFIG_USE_RELATIVE_PATH
);
wxConfigBase::Set(pConfig);

pConfig->SetPath(_T("/section"));
pConfig->Write(_T("/section/name"), wxT("qqq"));

И совершенно он ничего не создает. Открыл скрытые файлы, совершенно ничего нет. Ошибки ни какой не выводит. Просто не создает и все. Уже через поиск посмотрел ... НИЧЕГО. Вы уверены, что у вас этот код работает? Удалите свой файл conf.ini и попробуйте выполнить приложение.
Ща проверил, все работает :))) ща кину проект под CodeLite
Не нужен проект.
1. у меня нет коделайт.
2. у меня ubuntu. Проверяй под ней а не под чикой.

borr_1
Super wx Problem Solver
Super wx Problem Solver
Posts: 362
Joined: Wed Mar 07, 2007 8:10 am
Location: Russia, Shakhty

Post by borr_1 » Mon Aug 16, 2010 12:57 pm

может банально нет прав записи в каталог у пользователя из под которого запускаешь программу
WinXP SP3, wx-2.8.10, MinGW-4.4.1, gdb-7.1.2, eclipse

midisa
Earned some good credits
Earned some good credits
Posts: 113
Joined: Tue Jun 22, 2010 4:15 pm
Contact:

Post by midisa » Mon Aug 16, 2010 12:59 pm

borr_1 wrote:может банально нет прав записи в каталог у пользователя из под которого запускаешь программу
Беру чистый С++ и пишу и читаю. Права есть, а тут не нашлось прав....

FILE * pFile;
pFile = fopen(name_file,"r");
char *buffer;
if (pFile!=NULL)
{
fread(buffer, 512, 512, pFile );
fclose (pFile);
return buffer;
}

borr_1
Super wx Problem Solver
Super wx Problem Solver
Posts: 362
Joined: Wed Mar 07, 2007 8:10 am
Location: Russia, Shakhty

Post by borr_1 » Mon Aug 16, 2010 1:04 pm

ты где ищешь? если в каталоге с бинарником тогда попробуй оставить только wxCONFIG_USE_RELATIVE_PATH в стиле
WinXP SP3, wx-2.8.10, MinGW-4.4.1, gdb-7.1.2, eclipse

borr_1
Super wx Problem Solver
Super wx Problem Solver
Posts: 362
Joined: Wed Mar 07, 2007 8:10 am
Location: Russia, Shakhty

Post by borr_1 » Mon Aug 16, 2010 1:08 pm

так его в /home/.. надо искать если я не ошибаюсь
WinXP SP3, wx-2.8.10, MinGW-4.4.1, gdb-7.1.2, eclipse

Mojo
Super wx Problem Solver
Super wx Problem Solver
Posts: 401
Joined: Wed Sep 21, 2005 8:17 am
Location: Rostov-on-Don, Southern Russia

Post by Mojo » Mon Aug 16, 2010 1:11 pm

Вот проект, который у меня железно работает. Разумеется под Убунтой, под Кодлайт, но можно пересобрать в другой ИДЕ, там всего 4 файла, 2 с расширением срр, и 2 заголовочных *.h



Кстати, забыл добавить, что желательно удалять динамически созданный объект wxConfigBase инструкцией:

Code: Select all

delete wxConfigBase::Set((wxConfigBase *) NULL);
Attachments
MyConfig.zip
(2.96 KiB) Downloaded 121 times
Win XP HE SP3, Vista
Xubuntu 12.04 LTS
wxWidgets-2.9.5
wxWidgets-3.0.0

Mojo
Super wx Problem Solver
Super wx Problem Solver
Posts: 401
Joined: Wed Sep 21, 2005 8:17 am
Location: Rostov-on-Don, Southern Russia

Post by Mojo » Mon Aug 16, 2010 1:12 pm

borr_1 wrote:так его в /home/.. надо искать если я не ошибаюсь
В зависимости от установок, или в домашнем или в каталоге с программой.
Win XP HE SP3, Vista
Xubuntu 12.04 LTS
wxWidgets-2.9.5
wxWidgets-3.0.0

midisa
Earned some good credits
Earned some good credits
Posts: 113
Joined: Tue Jun 22, 2010 4:15 pm
Contact:

Post by midisa » Mon Aug 16, 2010 1:19 pm

Mojo wrote:
borr_1 wrote:так его в /home/.. надо искать если я не ошибаюсь
В зависимости от установок, или в домашнем или в каталоге с программой.
УРА НАШЕЛ! Действительно файл есть. А как читать из этого файла?

Вы уж меня простите великодушно. С такими вариантами записи в файл я встречаюсь впервые. Чего то они как то витеевато запись делают. А как читать это дело, даже представить трудно ...

Mojo
Super wx Problem Solver
Super wx Problem Solver
Posts: 401
Joined: Wed Sep 21, 2005 8:17 am
Location: Rostov-on-Don, Southern Russia

Post by Mojo » Mon Aug 16, 2010 1:28 pm

midisa wrote:
Mojo wrote:
borr_1 wrote:так его в /home/.. надо искать если я не ошибаюсь
В зависимости от установок, или в домашнем или в каталоге с программой.
УРА НАШЕЛ! Действительно файл есть. А как читать из этого файла?

Вы уж меня простите великодушно. С такими вариантами записи в файл я встречаюсь впервые. Чего то они как то витеевато запись делают. А как читать это дело, даже представить трудно ...
Наоборот, записывает и читает максимально просто, не нужно никаких дополнительных функций, типа CreateFile, OpenFile или CloseFile.

Читает используя функцию pConfig->Read() в примере в каталоге samples такой код.

Code: Select all

 int x = pConfig->Read(_T("x"), 50)
Где _T("x") это значение которое ниобходимо считать, а 50 это значение по умолчанию, если х еще в файл не записали.
Win XP HE SP3, Vista
Xubuntu 12.04 LTS
wxWidgets-2.9.5
wxWidgets-3.0.0

midisa
Earned some good credits
Earned some good credits
Posts: 113
Joined: Tue Jun 22, 2010 4:15 pm
Contact:

Post by midisa » Mon Aug 16, 2010 2:04 pm

Mojo wrote:
midisa wrote:
Mojo wrote: В зависимости от установок, или в домашнем или в каталоге с программой.
УРА НАШЕЛ! Действительно файл есть. А как читать из этого файла?

Вы уж меня простите великодушно. С такими вариантами записи в файл я встречаюсь впервые. Чего то они как то витеевато запись делают. А как читать это дело, даже представить трудно ...
Наоборот, записывает и читает максимально просто, не нужно никаких дополнительных функций, типа CreateFile, OpenFile или CloseFile.

Читает используя функцию pConfig->Read() в примере в каталоге samples такой код.

Code: Select all

 int x = pConfig->Read(_T("x"), 50)
Где _T("x") это значение которое ниобходимо считать, а 50 это значение по умолчанию, если х еще в файл не записали.
Снова не понятно. А где указываем имя секции с которой читать? Где указываем имя параметра который считывать?

midisa
Earned some good credits
Earned some good credits
Posts: 113
Joined: Tue Jun 22, 2010 4:15 pm
Contact:

Post by midisa » Mon Aug 16, 2010 2:12 pm

при попытке писать в директорию запускаемого файла:
wxString wsFile(dir.GetExecutablePath() + wxT("/conf.ini") );
wxFileConfig *pConfig = new wxFileConfig(
wxEmptyString, // app name
wxEmptyString, // vendor name
wsFile, //_T("conf.ini"),
wxEmptyString,
wxCONFIG_USE_LOCAL_FILE
);
wxConfigBase::Set(pConfig);

pConfig->SetPath(_T("/section"));
pConfig->Write(_T("/section/name"), wxT("qqq"));

не пишет. может опять не там ищу? При попытке выполнить
эту команду:
delete wxConfigBase::Set((wxConfigBase *) NULL);
выдает сообщение об ошибке. (пишу перевод по русски)
Не могу открыть пользовательский конфигурационный файл.

midisa
Earned some good credits
Earned some good credits
Posts: 113
Joined: Tue Jun 22, 2010 4:15 pm
Contact:

Post by midisa » Mon Aug 16, 2010 2:13 pm

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

Mojo
Super wx Problem Solver
Super wx Problem Solver
Posts: 401
Joined: Wed Sep 21, 2005 8:17 am
Location: Rostov-on-Don, Southern Russia

Post by Mojo » Mon Aug 16, 2010 2:39 pm

midisa wrote:при попытке писать в директорию запускаемого файла:
wxString wsFile(dir.GetExecutablePath() + wxT("/conf.ini") );
wxFileConfig *pConfig = new wxFileConfig(
wxEmptyString, // app name
wxEmptyString, // vendor name
wsFile, //_T("conf.ini"),
wxEmptyString,
wxCONFIG_USE_LOCAL_FILE
);
wxConfigBase::Set(pConfig);

pConfig->SetPath(_T("/section"));
pConfig->Write(_T("/section/name"), wxT("qqq"));

не пишет. может опять не там ищу? При попытке выполнить
эту команду:
delete wxConfigBase::Set((wxConfigBase *) NULL);
выдает сообщение об ошибке. (пишу перевод по русски)
Не могу открыть пользовательский конфигурационный файл.
"В ручную директорию", указывать не нужно, т.е. в этой строке
wxString wsFile(dir.GetExecutablePath() + wxT("/conf.ini") ); не нужно указывать dir.GetExecutablePath(), нужно указывать в конструкторе wxCONFIG_USE_LOCAL_FILE | wxCONFIG_USE_RELATIVE_PATH

значит файл либо не создан, либо не открыт, предварительно нужно проверять указатель как указано в примере:

Code: Select all

if ( pConfig == NULL )
удаляется объект как правило при закрытии программы
что то типа:

Code: Select all


OnExit()

{

	delete wxConfigBase::Set((wxConfigBase *) NULL);
	return true;

}

Конечно, если объект создан в инициализации главной функции.
Last edited by Mojo on Mon Aug 16, 2010 2:45 pm, edited 1 time in total.
Win XP HE SP3, Vista
Xubuntu 12.04 LTS
wxWidgets-2.9.5
wxWidgets-3.0.0

Mojo
Super wx Problem Solver
Super wx Problem Solver
Posts: 401
Joined: Wed Sep 21, 2005 8:17 am
Location: Rostov-on-Don, Southern Russia

Post by Mojo » Mon Aug 16, 2010 2:42 pm

midisa wrote:
Mojo wrote:
midisa wrote: УРА НАШЕЛ! Действительно файл есть. А как читать из этого файла?

Вы уж меня простите великодушно. С такими вариантами записи в файл я встречаюсь впервые. Чего то они как то витеевато запись делают. А как читать это дело, даже представить трудно ...
Наоборот, записывает и читает максимально просто, не нужно никаких дополнительных функций, типа CreateFile, OpenFile или CloseFile.

Читает используя функцию pConfig->Read() в примере в каталоге samples такой код.

Code: Select all

 int x = pConfig->Read(_T("x"), 50)
Где _T("x") это значение которое ниобходимо считать, а 50 это значение по умолчанию, если х еще в файл не записали.
Снова не понятно. А где указываем имя секции с которой читать? Где указываем имя параметра который считывать?
Перед тем как считать парамет, имя секции указываем так:

Code: Select all

pConfig->SetPath(_T("/section"));
В примере samples это есть.....
Win XP HE SP3, Vista
Xubuntu 12.04 LTS
wxWidgets-2.9.5
wxWidgets-3.0.0

Mojo
Super wx Problem Solver
Super wx Problem Solver
Posts: 401
Joined: Wed Sep 21, 2005 8:17 am
Location: Rostov-on-Don, Southern Russia

Post by Mojo » Mon Aug 16, 2010 2:49 pm

Это пример config из каталога samples, тут все подробно расписано. Один файл, скомпилировать и запустить программу.
Attachments
conftest.cpp
(8.28 KiB) Downloaded 125 times
Win XP HE SP3, Vista
Xubuntu 12.04 LTS
wxWidgets-2.9.5
wxWidgets-3.0.0

Post Reply