版权声明:本文为博主原创文章,未经博主允许不得转载。 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
}
参考链接: