GetPrivateProfileString、WritePrivateProfileString读写.ini配置文件应用实例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_17017545/article/details/83380733

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

参考链接:

读写.ini配置文件
MFC读写ini配置文件

猜你喜欢

转载自blog.csdn.net/qq_17017545/article/details/83380733