GetPrivateProfileString、WritePrivateProfileString讀寫.ini配置檔案應用例項
阿新 • • 發佈:2018-12-17
應用背景(需求):配置工具(exe)開啟一個prof後,下次該prof將作為預設開啟的prof 分析:當開啟一個檔案後,立刻獲取檔案的檔名,並儲存到 .ini 檔案內,在配置工具的的程式初始化函式中加入讀取ini檔案獲取已儲存的檔名的處理,當下次開啟配置工具,即會自動尋找ini檔案並開啟,獲取prof檔名,並載入配置到工具內。
WritePrivateProfileString
SerialCom::OnReadFile() { char strTemp[512]; GetCurrentDirectory(512,strTemp); CFileDialog fileDlg(TRUE,NULL, ConfigFileName,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"Profile Files (*.prof)|*.prof||"); //ConfigFileName 為全域性變數 fileDlg.m_ofn.lpstrInitialDir = strTemp; if (fileDlg.DoModal() != IDOK) { return; } CString sFileName = fileDlg.GetPathName(); //獲取完整路徑(包括檔名):比如 "D:\\Program Files\\ConfigTool\\L200 ConfigTool _Device Address\\L200 configtool\\L200.prof" FILE* fpFile = fopen(sFileName,"rb"); if(fpFile == NULL) { AfxMessageBox(CString("Cannot find profile \"")+sFileName+"\".\r\nPlease make sure this file exists."); return; } m_pSerialCfg->LoadAllCmd(fpFile); ConfigFileName = fileDlg.GetFileName(); //獲取檔名:"L200.prof" CString Path = sFileName.Left(sFileName.GetLength()- ConfigFileName.GetLength()); //獲取單純的路徑,不包括檔名 如 "D:\\Program Files\\ConfigTool\\L200 ConfigTool _Device Address\\L200 configtool\\" WritePrivateProfileString("MobileHelp", "FileName", ConfigFileName, Path + "Config.ini"); //"D:\\Program Files\\ConfigTool\\L200 ConfigTool _Device Address\\L200 configtool\\Config.ini" fclose(fpFile); }
GetPrivateProfileString
BOOL SerialCom::OnInitDialog() { ………… CDialog::OnInitDialog(); //獲取INI內已經儲存的檔名,程式一執行並自動載入此檔案 int MAX_PATHLENGTH = 260; CString SaveFileName; CString InitPath = ""; ::GetCurrentDirectory(MAX_PATHLENGTH, InitPath.GetBuffer(MAX_PATHLENGTH)); //獲取當前 Open Profile 的預設路徑,跟exe檔案在同一路徑 InitPath.ReleaseBuffer(); InitPath += "\\Config.ini"; //完整路徑(包含了INI檔名) GetPrivateProfileString("MobileHelp", "FileName", "", SaveFileName.GetBufferSetLength(35), 35, InitPath); //開啟INI檔案獲取 FileName 後面的字元,存入SaveFileName() SaveFileName.ReleaseBuffer(); //注意:在這裡使用CString變數時,在使用完GetBuffer後,緊接著一定要使用ReleaseBuffer()函式,才可以進行其他的諸如字串+操作 if (SaveFileName != "") { ConfigFileName = SaveFileName; //獲取上次關閉前儲存到INI檔案內的的預設配置檔名。 } //程式一執行就自動載入配置檔案 CFileDialog fileDlg(TRUE, NULL, ConfigFileName, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "Profile Files (*.prof)|*.prof||"); //ConfigFileName 為全域性變數 CString sFileName = fileDlg.GetPathName(); FILE* fpFile = fopen(sFileName, "rb"); if (fpFile != NULL) { SetDlgItemText(IDC_STATIC_PROFILE, "Profile file:" + sFileName); m_pSerialCfg->LoadAllCmd(fpFile); fclose(fpFile); } return TRUE; // return TRUE unless you set the focus to a control }
參考連結: