将所有控件中的数据存储为文件过程分析

版权声明:本文为博主原创文章,未经博主允许不得转载。 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 @ A T + G T S R I = A I R 11 , 3 , , , 555555 , 2 , 666666 , 6 , 18270634063 , , , , , , , 0003
1@AT+GTCFG=AIR11,,,10,10,,3,,,,,,,,,,,,,,,,,0004 1 @ A T + G T N M D = A I R 11 , 1 , 50 , 2 , , , , , , , , , , , 0005
1@AT+GTFRI=AIR11,9,,,,0000,2359,250,,,,,,,,,,,,,0007 1 @ A T + G T W L T = A I R 11 , , 1 , 4 , , 18270634065 , 18270634066 , 18270634067 , , , , , 000 C
1@AT+GTAGP=AIR11,1,,,,,,,,,,,,,,,0020 1 @ A T + G T W S L = A I R 11 , , 1 , 2 , 18270634061 , 18270634062 , , , , , 0018
1@AT+GTDEV=AIR11,3211111,1322222,1433333,2044444,2155555,2266666,1477777,2088888,2199999,22AAAAA,30BBBBB,31CCCCC,32DDDDD,32EEEEE,11FFFFF,12ABC12,0021$

猜你喜欢

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