VC++ 實現INI檔案讀寫操作
阿新 • • 發佈:2019-01-14
轉載:https://blog.csdn.net/fan380485838/article/details/73188420
在實際專案開發中,會用ini配置檔案,在此總結一下對ini讀寫操作
一:讀ini配置檔案
DWORD GetPrivateProfileString( LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpDefault, LPTSTR lpReturnedString, DWORD nSize, LPCTSTR lpFileName ); 其中各引數的意義: lpAppName 根節點name. lpKeyName 子節點name lpDefault : 如果INI檔案中沒有前兩個引數指定的欄位名或鍵名,則將此值賦給變數. lpReturnedString : 接收INI檔案中的值的CString物件,即目的快取器. nSize : 目的快取器的大小. lpFileName : 是完整的INI檔名.
二:寫ini配置檔案
BOOL WritePrivateProfileString( LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpString, LPCTSTR lpFileName ); 其中各引數的意義: LPCTSTR lpAppName 是INI檔案中的一個欄位名. LPCTSTR lpKeyName 是lpAppName下的一個鍵名,通俗講就是變數名. LPCTSTR lpString 是鍵值,也就是變數的值,不過必須為LPCTSTR型或CString型的. LPCTSTR lpFileName 是完整的INI檔名.
完整程式碼:
#include <iostream> #include <atlstr.h> using namespace std; void ReadIniFile(LPCWSTR lpFilePath) { CString strClass, strName, strAge, strSex, strGrade; //讀ini配置檔案 ::GetPrivateProfileString(_T("StudentInfo"), _T("Class"), _T(""), strClass.GetBuffer(MAX_PATH), MAX_PATH, lpFilePath); ::GetPrivateProfileString(_T("StudentInfo"), _T("Name"), _T(""), strName.GetBuffer(MAX_PATH), MAX_PATH, lpFilePath); ::GetPrivateProfileString(_T("StudentInfo"), _T("Age"), _T(""), strAge.GetBuffer(MAX_PATH), MAX_PATH, lpFilePath);//以字串形式讀取 int age = ::GetPrivateProfileInt(_T("StudentInfo"), _T("Age"), 0, lpFilePath);//返回值是value ::GetPrivateProfileString(_T("StudentInfo"), _T("Sex"), _T(""), strSex.GetBuffer(MAX_PATH), MAX_PATH, lpFilePath); ::GetPrivateProfileString(_T("StudentInfo"), _T("Grade"), _T(""), strGrade.GetBuffer(MAX_PATH), MAX_PATH, lpFilePath); } void WriteIniFile(LPCWSTR lpFilePath) { CString strClub, strPlayer, strNation, strAge, strGrade; strClub = "Barcelona"; strPlayer = "Messi"; strNation = "Argentina"; strAge = "31"; strGrade = "superstar"; ::WritePrivateProfileString(_T("Team"), _T("Club"), strClub, lpFilePath); ::WritePrivateProfileString(_T("Team"), _T("player"), strPlayer, lpFilePath); ::WritePrivateProfileString(_T("Team"), _T("nationality"), strNation, lpFilePath); ::WritePrivateProfileString(_T("Team"), _T("Age"), strAge, lpFilePath); ::WritePrivateProfileString(_T("Team"), _T("Grade"), strGrade, lpFilePath); } int main() { wchar_t szFileFullPath[MAX_PATH]; ::GetModuleFileName(NULL, szFileFullPath, MAX_PATH);//獲取檔案路徑 wstring strPath = szFileFullPath; strPath = strPath.substr(0, strPath.rfind('\\') + 1); strPath += L"demo.ini"; //寫ini配置檔案 //WriteIniFile(strPath.c_str()); //讀ini配置檔案 ReadIniFile(strPath.c_str()); return 0; }
三:配置檔案格式:
[StudentInfo] Class=11 Name=tom Age=18 Sex=男 Grade=優秀 [Team] Club=Barcelona player=Messi nationality=Argentina Age=31 Grade=superstar
四:如下需要注意下:
1.INI檔案的路徑必須完整,檔名前面的各級目錄必須存在,否則寫入不成功,該函式返回 FALSE 值.
2.檔名的路徑中必須為 \\ ,因為在VC++中, \\ 才表示一個 \ .
3.也可將INI檔案放在程式所在目錄,此時 lpFileName 引數為: ".\\demo.ini".
4:如果配置檔案中有中文字元,需要修改下配置檔案的格式。例如將配置檔案重新命名為ASCII碼格式。