配置文件( .INI )操作

配置文件( .INI )操作

1.SetRegistryKey 把配置文件写入注册表

 

使用CWinAppWriteProfileString GetProfileString等函数。
1
、如果不SetRegistryKey(),CWinApp会把信息保存系的的Test.ini文件中(C:\Windows\Test.ini)
2
、如果SetRegistryKey<companyname>),CWinApp会把信息保存系的的注册表中
   HKEY_CURRENT_USER\Software\<companyname>\Test\<section name>\<value name>.

注:SetRegistryKey()CWinApp的保,只能被CWinApp的成函数用。而WriteProfileStringGetProfileString等函数是公共成,可以随便用,一般用形式如:

theApp->WriteProfileString();      //Test.cpp中。
AfxGetApp()->WriteProfileString();
在其它源文件中 

HKEY_CURRENT_USER\Software\LocalAppWizard-Generated Applications\Msg\A

AfxGetApp()->WriteProfileString(L"A",L"B",L"V");

CStringset =  AfxGetApp()->GetProfileString(L"A",L"B");

 

 

 

2.信息写入.INI文件

2.1所用的WINAPI函数原型为:

BOOL WritePrivateProfileString(

LPCTSTR lpAppName,

LPCTSTR lpKeyName,

LPCTSTR lpString,

LPCTSTR lpFileName

);

其中各参数的意

LPCTSTR lpAppName INI文件中的一个字段名.

LPCTSTR lpKeyName lpAppName下的一个,通俗就是.

LPCTSTR lpString 键值,也就是量的,须为LPCTSTR型或CString型的.

LPCTSTR lpFileName 是完整的INI文件名,如果没有指定完整路径名,会在windows(默找文件。如果文件没有找到,函数会在windows录创建它。

2.2具体使用方法:

设现有一名学生,需把他的姓名和年写入 c:\stud\student.ini 文件中.

CString strName,strTemp;

int nAge;

strName="";

nAge=12;

::WritePrivateProfileString("StudentInfo","Name",strName,"c:\\stud\\student.ini");

c:\stud\student.ini文件中的内容如下:

[StudentInfo]

Name=

3.要将学生的年保存下来,只需将整型的值变为字符型即可:

strTemp.Format("%d",nAge);

::WritePrivateProfileString("StudentInfo","Age",strTemp,"c:\\stud\\student.ini");

 

3.将信息从INI文件中读入程序中的变量

3.1所用的WINAPI函数原型为:

DWORD GetPrivateProfileString(

LPCTSTR lpAppName,

LPCTSTR lpKeyName,

LPCTSTR lpDefault,

LPTSTR lpReturnedString,

DWORD nSize,

LPCTSTR lpFileName

);

其中各参数的意

前二个参数与 WritePrivateProfileString中的意.

lpDefault : 如果INI文件中没有前两个参数指定的字段名或,将此值赋给变.

lpReturnedString : 接收INI文件中的CString,即目的存器.

nSize : 目的存器的大小.

lpFileName : 是完整的INI文件名.

 

3.2具体使用方法:

要将上一步中写入的学生的信息入程序中.

CString strStudName;

int nStudAge;

GetPrivateProfileString("StudentInfo","Name","姓名",strStudName.GetBuffer(MAX_PATH),MAX_PATH,"c:\\stud\\student.ini");

行后 strStudName值为:"",若前两个参数有,值为:"姓名".

注意:如果在入的ini文件不存在,按默认值生成相ini文件

 

3.3读出整型值要用另一个WINAPI函数:

 

UINT GetPrivateProfileInt(

LPCTSTR lpAppName,

LPCTSTR lpKeyName,

INT nDefault,

LPCTSTR lpFileName

);

里的参数意与上相同.使用方法如下:

nStudAge=GetPrivateProfileInt("StudentInfo","Age",10,"c:\\stud\\student.ini");

 

4. 最近文件列表及 LoadStdProfileSettings

 

最近文件列表可以你很方便地打开你以前曾打开的文 
件,那么,如何为自己的应用程序加入最近文件列表功能呢? 
  最简单的方法就是在你新建工程的时候选择包含最近文件列 
表功能,也就是在 MFC AppWizard 的第 4 步的时候使 “How  
many files would you like on your recent file list?” 
的 
值不为 0 即可。 
  如果你在新建工程的时候没有选择包含最近文件列表功能, 
那么可以按照如下的方法为你的工程加入它: 
  1.在你的“文件”菜单中添加一个名称为“最近文件”的菜 
单项,其 ID 为 ID_FILE_MRU_FILE1。 
  2.在你的工程的 App 类的 InitInstance 方法中将 
    LoadStdProfileSettings(0); 
改成: 
    LoadStdProfileSettings(); 
即可。 
  这样,你的工程就有了最近文件列表功能。 
  事实上,以这种方法生成的最近文件列表项是保存在注册表 
中 HKEY_CURRENT_USER/Sofrware/Loacl Appwizard-Generated  
Applications 
下以你的工程名为主键的 Recent File List  主 
键中 File? 格式的字符串值中。LoadStdProfileSettings 的参 
数值决定了保存在这里的最近文件的数目,其默认值(没有参数 
时)为 4。 Loacl Appwizard-Generated Applications 主键是 
Visual C++ 
默认的,在工程的 App 类的 InitInstance 方法中 
由 SetRegistryKey() 函数创建的,你可以将其改成你需要的名 
称,例如: 
  SetRegistryKey(_T("skyice software")); 
  那么,如何处理从菜单中选择的最近文件列表中的文件呢? 
由于在菜单中只有 ID_FILE_MRU_FILE1  这一个菜单项,其余的 
菜单项都是由 LoadStdProfileSettings();  动态的加上的,因 
此,用一般的方法难以实现对菜单项的响应。此时,可以采用如 
下的方法: 
  1.在 CMainFrame 类中加入对菜单项 ID_FILE_MRU_FILE1的 
响应。 
  2.在 MainFrm.cpp 中将 
  ON_COMMAND(ID_FILE_MRU_FILE1,OnFileMruFile1) 
改成 
  ON_COMMAND_RANGE(ID_FILE_MRU_FILE1,ID_FILE_MRU_FILE4,  
OnFileMruFile1) 

即可。 
  以后,所有对最近文件列表中文件的选择都由 CMainFrame  
方法 OnFileMruFile1 响应,你可以在此函数中判断具体是选择 
了哪个文件,进而做出相应的处理。

 

5.注意事项

 

1.INI文件的路径必完整,文件名前面的各存在,写入不成功,函数返回 FALSE .

2.文件名的路径中必须为 \\ ,VC++, \\ 才表示一个 \ .

3.也可将INI文件放在程序所在目, lpFileName 参数: ".\\student.ini".

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值