1. 程式人生 > >GetPrivateProfileString、WritePrivateProfileString讀寫.ini配置檔案應用例項

GetPrivateProfileString、WritePrivateProfileString讀寫.ini配置檔案應用例項

應用背景(需求):配置工具(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
}

參考連結: