版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_17017545/article/details/79301923
注释详尽,看下方代码即可
// Save 菜单项消息处理函数
void CIntegrityMobileConfiguratorDlg::OnFileSave()
{
// TODO: 在此添加命令处理程序代码
char strTemp[512];
GetCurrentDirectory(512,strTemp);
/*
DWORD GetCurrentDirectory(DWORD nBufferLength,//sizeof directorybuffer
LPTSTR lpBuffer//directorybuffer
);
函数功能:获取当前进程的当前目录
nBufferLength 缓冲区的长度
lpBuffer 指定一个预定义字串,用于装载当前目录
调用成功 返回装载到lpBuffer的字节数。
*/
CFileDialog fileDlg(FALSE,NULL,"default.prof",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"Profile Files (*.prof)|*.prof||");
/*
CFileDialog::CFileDialog
(
BOOL bOpenFileDialog, //TRUE则显示打开文件对话框,FALSE则显示保存文件对话框。
LPCTSTR lpszDefExt = NULL, //指定默认的文件扩展名。
LPCTSTR lpszFileName = NULL, //指定默认的文件名。
DWORD dwFlags = OFN_HIDEREADONLY |OFN_OVERWRITEPROMPT, //指明一些特定风格
LPCTSTR lpszFilter = NULL, //是最重要的一个参数,它指明可供选择的文件类型和相应的扩展名
CWnd* pParentWnd = NULL //为父窗口指针。
);
*/
fileDlg.m_ofn.lpstrInitialDir = strTemp; //指向以空字符结束的字符串,可以在这个字符串中指定初始目录
if (fileDlg.DoModal() != IDOK) //初始化对话框控件后,调用DoModal成员函数显示对话框并使用户输入路径和文件
{
return;
}
CString sFileName = fileDlg.GetPathName();
//GetPathName返回文件路径(盘符+路径+文件名) ?,
//然后用_splitpath()进行分割,可以直接分割为盘符\路径\文件名\扩展名,
//我们一般是通过GetPathName()返回的结果解析出路径来。
FILE* fpFile = fopen(sFileName,"wb"); //以只写方式打开或新建一个二进制文件,只允许写数据。
if(fpFile == NULL)
{
AfxMessageBox(CString("Cannot find profile \"")+sFileName+"\".\r\nPlease make sure this file exists.");
return;
}
SaveAllCmd(fpFile,FALSE);
fclose(fpFile);
}
//将每个AT命令一个一个组合起来
void CIntegrityMobileConfiguratorDlg::SaveAllCmd(FILE *fp, BOOL isBackup)
{
CString strSave, strTemp,stronoff;
char limitChar = isBackup? '3': '@';
//Version compatibility info
strSave.Format("## ConfigTool compatibility info: t%02x\r\n",COMPATIBLE_VERNO_MAX);
//GTBSI
strSave += char('0'+1);
if(((CEdit*)page2.GetDlgItem(IDC_EDIT_GTBSI))->LineLength())
page2.GetDlgItemText(IDC_EDIT_GTBSI,strTemp);
else
strTemp = CFG_CMD_GTBSI;
strSave += limitChar+strTemp+"\r\n";
//GTSRI
strSave += char('0'+1);
if(((CEdit*)page2.GetDlgItem(IDC_EDIT_GTSRI))->LineLength())
page2.GetDlgItemText(IDC_EDIT_GTSRI,strTemp);
else
strTemp = CFG_CMD_GTSRI;
strSave += limitChar+strTemp+"\r\n";
//GTCFG
strSave += char('0'+1);
if(((CEdit*)page2.GetDlgItem(IDC_EDIT_GTCFG))->LineLength())
page2.GetDlgItemText(IDC_EDIT_GTCFG,strTemp);
else
strTemp = CFG_CMD_GTCFG;
strSave += limitChar+strTemp+"\r\n";
//GTNMD
strSave += char('0'+1);
if(((CEdit*)page2.GetDlgItem(IDC_EDIT_GTNMD))->LineLength())
page2.GetDlgItemText(IDC_EDIT_GTNMD,strTemp);
else
strTemp = CFG_CMD_GTNMD;
strSave += limitChar+strTemp+"\r\n";
//GTFRI
strSave += char('0'+1);
if(((CEdit*)page2.GetDlgItem(IDC_EDIT_GTFRI))->LineLength())
page2.GetDlgItemText(IDC_EDIT_GTFRI,strTemp);
else
strTemp = CFG_CMD_GTFRI;
strSave += limitChar+strTemp+"\r\n";
//GTWLT
strSave += char('0'+1);
if(((CEdit*)page2.GetDlgItem(IDC_EDIT_GTWLT))->LineLength())
page2.GetDlgItemText(IDC_EDIT_GTWLT,strTemp);
else
strTemp = CFG_CMD_GTWLT;
strSave += limitChar+strTemp+"\r\n";
//GTAGP
stronoff.Format("%d",1);
strSave +=stronoff;
if(((CEdit*)page2.GetDlgItem(IDC_EDIT_GTAGP))->LineLength())
page2.GetDlgItemText(IDC_EDIT_GTAGP,strTemp);
else
strTemp = CFG_CMD_GTAGP;
strSave += limitChar+strTemp+"\r\n";
//GTWSL
strSave += char('0'+1);
if(((CEdit*)page2.GetDlgItem(IDC_EDIT_GTWSL))->LineLength())
page2.GetDlgItemText(IDC_EDIT_GTWSL,strTemp);
else
strTemp = CFG_CMD_GTWSL;
strSave += limitChar+strTemp+"\r\n";
//GTMDA
stronoff.Format("%d",1);
strSave +=stronoff;
if(((CEdit*)page1.GetDlgItem(IDC_EDIT_GTDEV))->LineLength())
page1.GetDlgItemText(IDC_EDIT_GTDEV,strTemp);
else
strTemp = CFG_CMD_GTDEV;
strSave += limitChar+strTemp+"\r\n";
fwrite(strSave,1,strSave.GetLength(),fp); //这里的strSave代表最终完整的数据,写入fp文件流中
/*
size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
返回值:返回实际写入的数据块数目
(1)buffer:是一个指针,对fwrite来说,是要获取数据的地址;
(2)size:要写入内容的单字节数;
(3)count:要进行写入size字节的数据项的个数;
(4)stream:目标文件指针;
(5)返回实际写入的数据项个数count。
*/
}
//文件的一般名称为 default.prof
文本存储内容示例
## ConfigTool compatibility info: t01
1@AT+GTBSI=AIR11,123456789,,,,,,,0002
1@AT+GTCFG=AIR11,,,10,10,,3,,,,,,,,,,,,,,,,,0004
1@AT+GTFRI=AIR11,9,,,,0000,2359,250,,,,,,,,,,,,,0007
1@AT+GTAGP=AIR11,1,,,,,,,,,,,,,,,0020
1@AT+GTDEV=AIR11,3211111,1322222,1433333,2044444,2155555,2266666,1477777,2088888,2199999,22AAAAA,30BBBBB,31CCCCC,32DDDDD,32EEEEE,11FFFFF,12ABC12,0021$