Skip to content

ini配置文件

INI文件(Initialization File,初始化文件)是一种纯文本格式的配置文件,格式如下:

  • 中括号内[]为节名,一个文件可以有多个节,每个节内可以包含若干个键值对
ini
[section1]
key1 = value1    ; 注释以分号开头
key2 = value2	 # 井号也可以是注释

[section2]
key3 = value3
key4 = value4

读取ini文件

GetPrivateProfileString()用于读取ini文件内容

c++
#ifdef UNICODE
#define GetPrivateProfileString  GetPrivateProfileStringW
#else
#define GetPrivateProfileString  GetPrivateProfileStringA
#endif // !UNICODE

DWORD GetPrivateProfileStringA(
  [in]  LPCTSTR lpAppName,   // 节名
  [in]  LPCTSTR lpKeyName,	// 键名
  [in]  LPCTSTR lpDefault,	// 默认值
  [out] LPSTR  lpReturnedString,		// 指向接收检索到的字符串的缓冲区的指针。
  [in]  DWORD   nSize,		// lpReturnedString 参数指向的缓冲区的大小(以字符为单位)。
  [in]  LPCTSTR lpFileName		// 读取的文件名
);

DWORD GetPrivateProfileStringW(
  [in]  LPCWSTR lpAppName,   // 节名
  [in]  LPCWSTR lpKeyName,	// 键名
  [in]  LPCWSTR lpDefault,	// 默认值
  [out] LPWSTR  lpReturnedString,		// 指向接收检索到的字符串的缓冲区的指针。
  [in]  DWORD   nSize,		// lpReturnedString 参数指向的缓冲区的大小(以字符为单位)。
  [in]  LPCWSTR lpFileName		// 读取的文件名
);

MFC中使用如下

cpp
TCHAR szBuffer[256];
DWORD dwRet = ::GetPrivateProfileString(
    _T("Section"),
    _T("Key"),
    _T("DefaultValue"),
    szBuffer,
    sizeof(szBuffer) / sizeof(TCHAR),
    _T("C:\\Desktop\\config.ini"),				// 路径中\要写两个用于转义
);
CString strValue = szBuffer;  // 获取的值

写入ini文件

GetPrivateProfileString()用于写入ini文件内容

c++
#ifdef UNICODE
#define WritePrivateProfileString  WritePrivateProfileStringW
#else
#define WritePrivateProfileString  WritePrivateProfileStringA
#endif // !UNICODE

BOOL WritePrivateProfileStringA(
  [in] LPCSTR lpAppName,			// 节名
  [in] LPCSTR lpKeyName,			// 键名
  [in] LPCSTR lpString,				// value值
  [in] LPCSTR lpFileName			// 文件路径
);

BOOL WritePrivateProfileStringW(
  [in] LPCWSTR lpAppName,			// 节名
  [in] LPCWSTR lpKeyName,			// 键名
  [in] LPCWSTR lpString,			// value值
  [in] LPCWSTR lpFileName			// 文件路径
);

MFC中使用如下

c++
::WritePrivateProfileString(
    _T("Section"),
    _T("Key"),
    _T("Value"),
    _T("C:\\Desktop\\config.ini")
);

MFC获取桌面路径

c++
void GetDesktopPath(CString& strPath) {
    TCHAR szPath[MAX_PATH];

    if (SUCCEEDED(SHGetFolderPath(
        NULL,                   // 无父窗口
        CSIDL_DESKTOP,          // 桌面标识符
        NULL,                   // 当前用户令牌
        SHGFP_TYPE_CURRENT,     // 获取当前路径(非默认)
        szPath)))               // 输出缓冲区
    {
        strPath = szPath; // 成功时赋值
    }
    else {
        strPath.Empty();  // 失败时清空
    }
}


// 使用
CString strDesktopPath;
GetDesktopPath(strDesktopPath);

MIT Licensed