13.9.3 将接收到的数据保存到文件中
将接收到的数据保存到文件中是工具栏特有的功能,实现函数是OnFile()。该函数实现将调试器当前显示接收信息编辑框中的内容,保存到用户指定的文本文件中,实现如下:
- 01 void CComElvesDlg::OnFile()
- 02 {
- 03 CFileDialog dlg(FALSE, "txt", ".txt",
- 04 OFN_HIDEREADONLY| OFN_OVERWRITEPROMPT,"
- 05 Aes Files(*.txt)|*.txt"); //保存文件对话框
- 06 if ( dlg.DoModal()!=IDOK ) //用户取消保存文件
- 07 {
- 08 return;
- 09 }
- 10 CString strPath=dlg.GetPathName(); //获取文件的绝对路径
- 11 //获取调试界面上显示接收数据区域内的数据
- 12 UpdateData(TRUE);
- 13 int nLength;
- 14 nLength = strPath.GetLength(); //获取接收数据的长度
- 15 CFile m_rFile;
- 16 LPCSTR lpszPath =strPath;
- 17 SetCurrentDirectory( lpszPath );
- 18 //打开用户指定的文件
- 19 if(!m_rFile.Open(lpszPath,CFile::modeCreate | CFile::modeWrite ))
- 20 { //打开失败
- 21 AfxMessageBox( "创建记录文件失败!");
- 22 return;
- 23 }
- 24 //将数据写入文件
- 25 CTime t = CTime::GetCurrentTime();
- 26 CString str=t.Format("%Y年%m月%d日%H时%M分%S秒\r\n");
- 27 m_rFile.Write((LPCTSTR)str,str.GetLength());
- 28 m_rFile.Write((LPCTSTR)m_DRData,m_DRData.GetLength());
- 29 m_rFile.Flush();
- 30 m_rFile.Close();
- 31 }
【代码解析】
在第3~5行定义了一个只保存txt类型文件的另存为文件对话框。第6行显示这个保存文件对话框。如果用户没有选择将要保存的文件,则在第7行直接退出。第10行获取用户选择保存文件的全路径。第12行获取当前调试器界面上显示接收数据编辑框中所有的数据信息,并在第14、15行获取这个数据的长度。第17行将当前保存文件的路径设置为当前路径。第19行打开用户将要保存的文件,如果打开失败则在第21行提示失败信息,并在第22行退出。如果打开成功则在第27行获取当前时间,并在26行将当前时间格式化为一个字符串,然后在第27行将当前时间写入文件。然后在第28行将获取的接收数据写入文件。在第29行完成写入工作,并在第30行关闭文件。