INI文件是一种非常普遍的配置文件格式,很多常见的软件都使用INI文件来存储一些非常基础的配置信息,如系统文件路径、用户名、密码等等。要访问INI文件,可以使用WinAPI中的WritePrivateProfileString函数,本文将介绍如何使用它来写入INI文件中的配置项。
一、WritePrivateProfileString函数
WritePrivateProfileString函数是Windows API中的一个函数,用于修改INI文件中的配置项。该函数的声明如下:
```c++
BOOL WritePrivateProfileString(
LPCTSTR lpAppName, // 配置项所在的节名
LPCTSTR lpKeyName, // 配置项名
LPCTSTR lpString, // 配置项值
LPCTSTR lpFileName // INI文件名
);
```
在函数调用过程中,lpAppName代表了配置项所在的节名;lpKeyName代表了配置项名;lpString代表了配置项的值;lpFileName代表了要写入配置项的INI文件路径。如果写入成功,该函数将返回TRUE,否则返回FALSE。
这里需要注意的是,lpFileName需要传入一个完整的INI文件路径,包括文件名和文件后缀名,如“C:\config.ini”等文件路径。否则,该函数将返回FALSE。
二、使用WritePrivateProfileString函数写入INI文件
上面已经介绍了WritePrivateProfileString函数的语法和参数,接下来将演示如何使用该函数来写入INI文件。
1.创建INI文件
首先,需要创建一个INI文件,在数据存储的根目录下新建一个config.ini等文件,并在其中添加一些配置项。
```ini
[Section1]
Key1=Value1
Key2=Value2
```
值得注意的是,如果该文件不存在,可以在运行时使用CreateFile函数来创建文件。
2.打开INI文件
写入配置项之前,需要先打开INI文件。这里使用Win32 API中的GetPrivateProfileString函数来打开INI文件,代码如下:
```c++
#include
// 获取INI文件中某个key的值
BOOL GetINIValue(LPCWSTR lpAppName, LPCWSTR lpKeyName, LPCWSTR lpDefault, LPWSTR lpReturnedString, DWORD nSize, LPCWSTR lpFileName)
{
return ::GetPrivateProfileStringW(lpAppName, lpKeyName, lpDefault, lpReturnedString, nSize, lpFileName);
}
int main()
{
LPCWSTR lpFileName = L"C:\\config.ini";
// 读取Section1中的Key1配置项的值
WCHAR szValue[MAX_PATH] = { 0 };
GetINIValue(L"Section1", L"Key1", L"Default", szValue, MAX_PATH, lpFileName);
return 0;
}
```
在上述示例代码中,GetPrivateProfileString函数将读取INI文件中Section1节下的Key1配置项的值,并将该值存储在szValue数组中,最后返回TRUE或FALSE。在函数调用过程中,lpAppName、lpKeyName、lpDefault、lpReturnedString和nSize参数均是GetPrivateProfileString函数的参数,lpFileName参数代表了INI文件路径。
3.写入INI文件
在打开INI文件后,就可以使用WritePrivateProfileString函数来写入INI文件了。以下示例代码将向config.ini文件中的Section1节写入一个名为Key3的配置项。
```c++
#include
// 设置INI文件中某个key的值
BOOL SetINIValue(LPCWSTR lpAppName, LPCWSTR lpKeyName, LPCWSTR lpString, LPCWSTR lpFileName)
{
return ::WritePrivateProfileStringW(lpAppName, lpKeyName, lpString, lpFileName);
}
int main()
{
LPCWSTR lpFileName = L"C:\\config.ini";
// 在Section1中写入Key3配置项的值
SetINIValue(L"Section1", L"Key3", L"Value3", lpFileName);
return 0;
}
```
在上述示例代码中,SetINIValue函数将根据提供的配置项(Section1、Key3和Value3)写入INI文件中。最后的lpFileName参数代表了INI文件路径。
4.指定Section名
在WritePrivateProfileString函数中,如果Section参数为NULL,则INI文件中的配置项将被写入到INI文件的根目录中,而不属于任何节。建议使用节名来组织和描述配置项。以下示例代码将在INI文件的已知节中写入一个配置项,同时使用了默认值。
```c++
#include
// 在指定的节中设置INI文件中某个key的值
BOOL SetINIValue(LPCWSTR lpAppName, LPCWSTR lpKeyName, LPCWSTR lpString, LPCWSTR lpFileName)
{
return ::WritePrivateProfileStringW(lpAppName, lpKeyName, lpString, lpFileName);
}
int main()
{
LPCWSTR lpFileName = L"C:\\config.ini";
// 在Section2中写入Key4配置项的值,同时使用默认值Default
SetINIValue(NULL, L"Key4", L"Default", lpFileName);
SetINIValue(L"Section2", L"Key4", L"Value4", lpFileName);
return 0;
}
```
在上述示例代码中,第一个SetINIValue函数将配置项写入INI文件的根目录中,而不属于任何节。第二个SetINIValue函数将配置项写入INI文件的Section2节中。
三、结论
除了写入INI文件中的配置项,还可以使用GetPrivateProfileInt函数和GetPrivateProfileSection函数来从INI文件中获取配置项和获取INI文件中的全部配置项。如果INI文件变得庞大和复杂,可以使用WritePrivateProfileString函数按照一定的章节和顺序进行组织。总之,WritePrivateProfileString函数是一个非常实用的API函数,可以为Windows程序的配置项提供灵活、高效和可读的存储方式。