使用C++讀寫和添加.ini文件中的配置參數

 關於如何讀取和修改ini配置文件的文章挺多的,而且讀寫操作也簡單,記錄一下,再補充一點邊緣的東西留一篇以後備用。

一、 如何讀取和修改ini配置文件

1. 頭文件:#include <Shlwapi.h>

2. 讀寫的三個函數

/******************************************************************************************
獲取鍵值
DWORD GetPrivateProfileString(
LPCTSTR lpAppName,        // INI文件中的一個字段名[節名]可以有很多個節名
LPCTSTR lpKeyName,        // lpAppName 下的一個鍵名,也就是裏面具體的變量名
LPCTSTR lpDefault,        // 如果lpReturnedString爲空,則把個變量賦給lpReturnedString
LPTSTR lpReturnedString,  // 存放鍵值的指針變量,用於接收INI文件中鍵值(數據)的接收緩衝區
DWORD nSize,            // lpReturnedString的緩衝區大小
LPCTSTR lpFileName        // INI文件的路徑
);
UINT GetPrivateProfileInt(
LPCTSTR lpAppName,  // INI文件中的一個字段名[節名]可以有很多個節名
LPCTSTR lpKeyName,  // lpAppName 下的一個鍵名,也就是裏面具體的變量名
INT nDefault,       // 如果沒有找到指定的數據返回,則把個變量值賦給返回值
LPCTSTR lpFileName  // INI文件的路徑
);
******************************************************************************************
修改鍵值或添加節點與鍵值
BOOL WritePrivateProfileString(
LPCTSTR lpAppName,  // INI文件中的一個字段名[節名]可以有很多個節名
LPCTSTR lpKeyName,  // lpAppName 下的一個鍵名,也就是裏面具體的變量名
LPCTSTR lpString,   // 鍵值,也就是數據
LPCTSTR lpFileName  // INI文件的路徑
);
******************************************************************************************/

 其實只要這麼多你基本就可以完成對ini配置參數文件進行讀寫和添加了。

3. 代碼示例(VS2015的C++空項目)。

#include <iostream>
#include <io.h>
#include <Shlwapi.h>

using namespace std;

int main(int argc, char *argv[])
{
//讀取內容
	char fileSrc[_MAX_DIR];
	memset(fileSrc, 0, _MAX_DIR);
	strcpy_s(fileSrc, "./Param.ini");
	if (_access(fileSrc, 0))
	{//判斷文件是否存在
		cout << " File Path Error !" << endl;
		system("PAUSE");
		return 0;
	}
	char strbuf[255];
	memset(strbuf, 0, sizeof(strbuf));
	GetPrivateProfileString("USER_INFO", "UserName", "", strbuf, sizeof(strbuf) - 1, fileSrc);
	cout << strbuf << endl;
	memset(strbuf, 0, sizeof(strbuf));
	GetPrivateProfileString("USER_INFO", "Password", "", strbuf, sizeof(strbuf) - 1, fileSrc);
	cout << strbuf << endl;

	int MemberNumber = GetPrivateProfileInt("USER_INFO", "MemberNumber", 0, fileSrc);
	cout << MemberNumber << endl;

//修改內容
	WritePrivateProfileString("USER_INFO", "Password", "join54321", fileSrc);

//添加加內容(無論數字還是字符串修改寫入都用一個函數)
	WritePrivateProfileString("USER_MACHINE", "MachineNumber", "151221001", fileSrc);
	WritePrivateProfileString("USER_MACHINE", "LicenseNumber", "A5B7LV30MO", fileSrc);

	system("PAUSE");
	return 0;
}
  • 修改前的文件

  • 運行輸出

  • 文件最終狀態

4. 使用不同版本VS時可能出現的問題

  • 在包含了頭文件後,雖然語法上沒有任何錯誤提示,但是編譯時卻報錯。

在文件頂部加上#pragma comment(lib,"Shlwapi.lib")試試。

  • 在使用讀寫函數時,使用字符串作爲參數時提示:參數不兼容。

使用#include <afxconv.h>中的USES_CONVERSION;A2TT2A將字符串轉換寬字節類型。值得注意的是使用時不要定義字符數組通過A2T轉換傳遞給函數以存儲數據,這樣會導致存儲進的內容亂碼,你可以先定義WCHAR去傳給函數存儲數據,然後再通過T2A轉換成你要的字符串。

二、程序後臺運行命令行指令(避免閃黑框)

 ShellExecute(NULL, NULL, _T("cmd"), _T("/C ipconfig /all > record"), NULL, SW_HIDE);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章