Win32环境下的ini文件读取

一、将信息写入.ini文件中.
所用的WINAPI函数原型为:

BOOL WritePrivateProfileStringA(
LPCTSTR lpAppName,
LPCTSTR lpKeyName,
LPCTSTR lpString,
LPCTSTR lpFileName
);
其中各参数的意义 :
  LPCTSTR lpAppName 是INI文件中的一个字段名.
  LPCTSTR lpKeyName 是lpAppName下的一个键名,通俗讲就是变量名.
  LPCTSTR lpString 是键值,也就是变量的值,不过必须为LPCTSTR型或CString型的.
  LPCTSTR lpFileName 是完整的INI文件名.

1. 设现有一名学生,需把他的姓名和年龄写入程序所在目录的student.ini文件中.

1). 

LPCTSTR strName;
strName = (LPCTSTR)"Sunny";
::WritePrivateProfileString(L"StudentInfo", L"Name", strName, L".\\student.ini");

这种方式在ini文件中会才出现中文乱码

2). 

::WritePrivateProfileString(L"StudentInfo", L"Name", L"Sunny", L".\\student.ini");

这种方式在ini文件中不会出现中文乱码,但是第3个参数,键值是硬编码,多数情况下不会这样写

3). 

string strName;
strName = "Sunny";
::WritePrivateProfileStringA("StudentInfo", "Name", strName.c_str(), ".\\student.ini");

这种方式在ini文件中也不会出现中文乱码,是一种比较好的解决方法

4).  

char strName[MAX_PATH] = "Sunny";
::WritePrivateProfileStringA("StudentInfo", "Name", strName, ".\\student.ini");

同上

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

char chTemp[4];
int nAge = 22;
itoa(nAge, chTemp, 10);
::WritePrivateProfileStringA("StudentInfo", "Age", chTemp, ".\\student.ini");

写出之后,程序所在目录的student.ini文件的内容如下:

[StudentInfo]

Name=Sunny

Age=22


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

1将ini文件中的学生的姓名读入程序中
所用的WINAPI函数原型为:

DWORD GetPrivateProfileStringA(
LPCTSTR lpAppName,
LPCTSTR lpKeyName,
LPCTSTR lpDefault,
LPTSTR lpReturnedString,
DWORD nSize,
LPCTSTR lpFileName
);
其中各参数的意义 :
  前二个参数与  WritePrivateProfileString 中的意义一样 .
   lpDefault :  如果 INI 文件中没有前两个参数指定的字段名或键名 , 则将此值赋给变量 .
   lpReturnedString :  接收 INI 文件中的值的对象(LPCTSTR 型或 CString ), 即目的缓存器 .
   nSize :  目的缓存器的大小 .
   lpFileName :  是完整的 INI 文件名

使用如下:

char chStudentName[MAX_PATH];
GetPrivateProfileStringA("StudentInfo", "Name", "默认姓名", chStudentName, MAX_PATH, ".\\student.ini"); 

执行后 strStudentName 的值为:"Sunny"; 若前两个参数有误,其值为:"默认姓名".

2. 读入整型值要用另一个WINAPI函数:

UINT GetPrivateProfileInt(
LPCTSTR lpAppName,
LPCTSTR lpKeyName,
INT nDefault,
LPCTSTR lpFileName
);

使用如下:
这里的参数意义与上相同.

int nStudentAge;
nStudentAge = GetPrivateProfileIntA("StudentInfo", "Age", 20, ".\\student.ini"); 

执行后 nStudentAge 的值为:22; 若前两个参数有误,其值为:20.


三、几点说明:

1. ini文件的路径必须完整,文件名前面的各级目录必须存在,否则写入不成功,该函数返回 FALSE.例如:lpFileName 参数为: ".c:\\usefile\\usefile.ini";也可将ini文件放在程序所在目录,此时 lpFileName 参数为: ".\\student.ini",实例即写到程序所在目录下。

2.  MFC环境下的ini文件读写,网上可以找到很多例子,本例子针对Win32环境下的ini文件读取操作。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用WIN32 API封装INI文件类的示例代码: ```cpp #include <Windows.h> #include <string> class IniFile { public: IniFile(const std::wstring& filename) : m_filename(filename) {} std::wstring GetValue(const std::wstring& section, const std::wstring& key) const { wchar_t buffer[256]; GetPrivateProfileStringW(section.c_str(), key.c_str(), L"", buffer, sizeof(buffer), m_filename.c_str()); return std::wstring(buffer); } void SetValue(const std::wstring& section, const std::wstring& key, const std::wstring& value) { WritePrivateProfileStringW(section.c_str(), key.c_str(), value.c_str(), m_filename.c_str()); } private: std::wstring m_filename; }; // 示例用法 int main() { IniFile ini(L"config.ini"); std::wstring value = ini.GetValue(L"SectionName", L"KeyName"); if (!value.empty()) { wprintf(L"Value: %s\n", value.c_str()); } else { wprintf(L"Value not found.\n"); } ini.SetValue(L"SectionName", L"KeyName", L"NewValue"); return 0; } ``` 在上述示例中,我们定义了一个`IniFile`类,该类封装了读取和写入INI文件的功能。它使用`GetPrivateProfileStringW`函数来读取INI文件中的值,并使用`WritePrivateProfileStringW`函数来写入INI文件。 在`IniFile`类中,我们提供了`GetValue`和`SetValue`两个成员函数,用于读取和写入INI文件中的值。这些函数接受`section`和`key`作为参数,并返回对应的值。 在示例的`main`函数中,我们创建了一个`IniFile`对象,传入INI文件的路径。然后,我们使用`GetValue`函数读取名为"SectionName"的section中的"KeyName"的值,并打印到控制台。接着,我们使用`SetValue`函数将"NewValue"写入到"SectionName"的"KeyName"中。 你可以根据实际需求修改和扩展这个示例。希望这个示例能够帮助你封装一个简单的INI文件类。如果有任何进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值