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:

INI файлы

Post by midisa » Mon Aug 09, 2010 3:20 am

Работает ли wxWidget с ini файлами? Если да, то как?

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

Re: INI файлы

Post by Mojo » Mon Aug 09, 2010 7:12 am

midisa wrote:Работает ли wxWidget с ini файлами? Если да, то как?
wxFileConfig под виндой можно выбирать куда сохранять, либо в реестр либо в ини файл, под линксом только в ини файл
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 09, 2010 8:35 am

нашел какой то пример:

wxFileConfig * config = new wxFileConfig(wxGetApp().GetAppName(), wxGetApp().GetVendorName(), wxT("clipdiary.cfg"));

вставляю в свой исходник. А мне компилятор говорит, что невозможно выполнить wxFileConfig ... что то такое.
Как я понял нужен какой то заголовочный файл ... какой?

Не пойму как с ним работать. Покажите две строки.
1. прочитать данные из файла.
2. записать данные в файл.
и что нужно подключать чтобы это дело работало?

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 09, 2010 11:39 am

midisa wrote:нашел какой то пример:

wxFileConfig * config = new wxFileConfig(wxGetApp().GetAppName(), wxGetApp().GetVendorName(), wxT("clipdiary.cfg"));

вставляю в свой исходник. А мне компилятор говорит, что невозможно выполнить wxFileConfig ... что то такое.
Как я понял нужен какой то заголовочный файл ... какой?

Не пойму как с ним работать. Покажите две строки.
1. прочитать данные из файла.
2. записать данные в файл.
и что нужно подключать чтобы это дело работало?
http://docs.wxwidgets.org/2.8.11/wx_wxfileconfig.html

Кроме того, в папке с примерами (samples), есть тестовая программа, демонстрирующая, как использовать этот класс.
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 10:09 am

Mojo wrote:
midisa wrote:нашел какой то пример:

wxFileConfig * config = new wxFileConfig(wxGetApp().GetAppName(), wxGetApp().GetVendorName(), wxT("clipdiary.cfg"));

вставляю в свой исходник. А мне компилятор говорит, что невозможно выполнить wxFileConfig ... что то такое.
Как я понял нужен какой то заголовочный файл ... какой?

Не пойму как с ним работать. Покажите две строки.
1. прочитать данные из файла.
2. записать данные в файл.
и что нужно подключать чтобы это дело работало?
http://docs.wxwidgets.org/2.8.11/wx_wxfileconfig.html

Кроме того, в папке с примерами (samples), есть тестовая программа, демонстрирующая, как использовать этот класс.
Как говориться, что то лыжи не едут ...

Совершенно ничего не понял. Чем больше читаю, тем меньше понимания.
Вы можете сказать мне что нужно написать, чтобы сохранить файл test.ini
с содержимым:
[section]
name = znachenie

Вот для того чтобы сохранить такой файл что нужно написать?

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 10:54 am

midisa wrote:
Как говориться, что то лыжи не едут ...

Совершенно ничего не понял. Чем больше читаю, тем меньше понимания.
Вы можете сказать мне что нужно написать, чтобы сохранить файл test.ini
с содержимым:
[section]
name = znachenie

Вот для того чтобы сохранить такой файл что нужно написать?
Открыл пример config в каталоге samples, а так же справку, судя по коду, должно быть типа так, сначала добавляем заголовочный файл:

Code: Select all

#include "wx/config.h"
Затем создаем создаем объект двумя способами, либо как в примере:

Code: Select all

wxConfigBase *pConfig = wxConfigBase::Get();
либо более привычно (как в документации) через конструктор:

Code: Select all

wxConfigBase *pConfig = new wxConfigBase(wxT("Имя приложения"), wxT("Фирма создатель"), wxT("test.ini"), wxT("test.ini"), wxCONFIG_USE_LOCAL_FILE); 
затем устанавливаем:

Code: Select all

wxConfigBase::Set(pConfig);
устанавливаем:

Code: Select all

pConfig->SetPath(_T("/section"));
Затем устанавливаем:

Code: Select all

int znachenie = 20;

pConfig->Write(_T("/section/name"), znachenie);

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 11:47 am

Mojo wrote:
midisa wrote:
Как говориться, что то лыжи не едут ...

Совершенно ничего не понял. Чем больше читаю, тем меньше понимания.
Вы можете сказать мне что нужно написать, чтобы сохранить файл test.ini
с содержимым:
[section]
name = znachenie

Вот для того чтобы сохранить такой файл что нужно написать?
Открыл пример config в каталоге samples, а так же справку, судя по коду, должно быть типа так, сначала добавляем заголовочный файл:

Code: Select all

#include "wx/config.h"
Затем создаем создаем объект двумя способами, либо как в примере:

Code: Select all

wxConfigBase *pConfig = wxConfigBase::Get();
либо более привычно (как в документации) через конструктор:

Code: Select all

wxConfigBase *pConfig = new wxConfigBase(wxT("Имя приложения"), wxT("Фирма создатель"), wxT("test.ini"), wxT("test.ini"), wxCONFIG_USE_LOCAL_FILE); 
затем устанавливаем:

Code: Select all

wxConfigBase::Set(pConfig);
устанавливаем:

Code: Select all

pConfig->SetPath(_T("/section"));
Затем устанавливаем:

Code: Select all

int znachenie = 20;
pConfig->Write(_T("/section/name"), znachenie);
ТОЛЬКО НЕ РУГАЙТЕСЬ!
1. Чего устанавливаем? :-) Мне нужно получить в конце простой ИНИ файл. Если я не ошибаюсь, то вы устанавливаете какие то пути ... Это не лишнее?
2. Допустим Вы все это установили ... а сохранять то когда будем? Мы устанавливаем, устанавливаем ... для чего? Как я понимаю в конце должно быть ... сохранить.

Или я не прав?

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 11:55 am

сделал так как вы сказали:
wxConfigBase *pConfig = new wxConfigBase(wxT("Имя приложения"), wxT("Фирма создатель"), wxT("test.ini"), wxT("test.ini"), wxCONFIG_USE_LOCAL_FILE);
wxConfigBase::Set(pConfig);
pConfig->SetPath(_T("/section"));
pConfig->Write(_T("/section/name"), wxT("qqq"));

Выдает ошибку
Setup.cpp:67: error: cannot allocate an object of abstract type ‘wxConfigBase’

Заголовочные файлы подключены.

#include <wx/config.h>
#include <wx/confbase.h>
#include <wx/fileconf.h>

В чем ошибка?

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 11:59 am

midisa wrote:
Mojo wrote:
midisa wrote:
Как говориться, что то лыжи не едут ...

Совершенно ничего не понял. Чем больше читаю, тем меньше понимания.
Вы можете сказать мне что нужно написать, чтобы сохранить файл test.ini
с содержимым:
[section]
name = znachenie

Вот для того чтобы сохранить такой файл что нужно написать?
Открыл пример config в каталоге samples, а так же справку, судя по коду, должно быть типа так, сначала добавляем заголовочный файл:

Code: Select all

#include "wx/config.h"
Затем создаем создаем объект двумя способами, либо как в примере:

Code: Select all

wxConfigBase *pConfig = wxConfigBase::Get();
либо более привычно (как в документации) через конструктор:

Code: Select all

wxConfigBase *pConfig = new wxConfigBase(wxT("Имя приложения"), wxT("Фирма создатель"), wxT("test.ini"), wxT("test.ini"), wxCONFIG_USE_LOCAL_FILE); 
затем устанавливаем:

Code: Select all

wxConfigBase::Set(pConfig);
устанавливаем:

Code: Select all

pConfig->SetPath(_T("/section"));
Затем устанавливаем:

Code: Select all

int znachenie = 20;
pConfig->Write(_T("/section/name"), znachenie);
ТОЛЬКО НЕ РУГАЙТЕСЬ!
1. Чего устанавливаем? :-) Мне нужно получить в конце простой ИНИ файл. Если я не ошибаюсь, то вы устанавливаете какие то пути ... Это не лишнее?
2. Допустим Вы все это установили ... а сохранять то когда будем? Мы устанавливаем, устанавливаем ... для чего? Как я понимаю в конце должно быть ... сохранить.

Или я не прав?
Конструктор автоматически создает ini-файл, (даже через функцию Get().
wxCONFIG_USE_LOCAL_FILE - устанавливает месторасплоложения файла.
Путь в контексте ini-файла означает раздел [section] т.е. содежримое файла будет:

[section]
name = 20

Если znachenie строка, т.е. wxString znachenie = wxT("znachenie");

то содержимое файла будет:

[section]
name = znachenie

сохраняется все автоматически фунцией

pConfig->Write

все проще чем кажется
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 12:18 pm

я создал тестовое приложение, там одна кнопка.

Заголовочный файл #include <wx/config.h>

В обработчике этой кнопки я пишу код:

Code: Select all


wxConfigBase *pConfig = wxConfigBase::Get();

pConfig->SetRecordDefaults();

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

 
И все работает хорошо, в домашнем каталоге, создается скрытый файл .imya_moego_prilozeniya

В этом файле записано:
[section]
name=qqq

Все работает, хотя и имя файла не имеет расширения *.ini для того, что бы задать точное имя с расширением, нужно задавать в конструкторе.
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 12:22 pm

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

Code: Select all


void MainFrame::OnButnClickOK( wxCommandEvent& event ) 
{ 
	
		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")); 

	
}

заголовочный файл тот же: #include <wx/config.h>

Теперь в том же каталоге, что и программа создается файл conf.ini в котором записано:

[section]
name=qqq
Win XP HE SP3, Vista
Xubuntu 12.04 LTS
wxWidgets-2.9.5
wxWidgets-3.0.0

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:22 pm

Mojo wrote: Все работает, хотя и имя файла не имеет расширения *.ini для того, что бы задать точное имя с расширением, нужно задавать в конструкторе.

Code: Select all

wxString ConfigFileName = wxT("fignya.ini");
wxFileConfig config(wxEmptyString,
                        wxEmptyString,
                        ConfigFileName,
                        wxEmptyString,
                        wxCONFIG_USE_RELATIVE_PATH
                        //wxCONFIG_USE_LOCAL_FILE
                        );
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 12:24 pm

borr_1 wrote:
Mojo wrote: Все работает, хотя и имя файла не имеет расширения *.ini для того, что бы задать точное имя с расширением, нужно задавать в конструкторе.

Code: Select all

wxString ConfigFileName = wxT("fignya.ini");
wxFileConfig config(wxEmptyString,
                        wxEmptyString,
                        ConfigFileName,
                        wxEmptyString,
                        wxCONFIG_USE_RELATIVE_PATH
                        //wxCONFIG_USE_LOCAL_FILE
                        );
Вот, точно, мой земляк borr все правильно делает.
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 12:44 pm

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



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 и попробуйте выполнить приложение.

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 12:53 pm

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
Win XP HE SP3, Vista
Xubuntu 12.04 LTS
wxWidgets-2.9.5
wxWidgets-3.0.0

Post Reply