最近写了一个MFC串口程序,涉及文件发送和保存的功能。
1.打开TXT文件
1 void CportDlg::OnBnClickedButtonOpenfile() //打开文件并显示内容 2 { 3 CFileDialog opendlg(true, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, (LPCTSTR)_TEXT("TXT Files (*.txt)|*.txt|All Files (*.*)|*.*||"), NULL); 4 if (opendlg.DoModal() == IDOK){ //显示对话框并允许用户进行选择。 5 CString filepathname = opendlg.GetPathName(); //文件路径 6 m_file.SetWindowTextW(filepathname); //在编辑框显示文件路径 7 CStdioFile fsend; CString s_one; 8 if (fsend.Open(filepathname, CFile::typeText | CFile::modeRead)) //只读模式打开txt文件 9 { 10 while (fsend.ReadString(s_one)) { //逐行读取文件内容 11 m_send += s_one; m_send += TEXT("\r\n"); 12 m_EditSend.SetWindowTextW(m_send); //将读取的文本显示在编辑框 13 } 14 fsend.Close(); 15 } 16 } 17 else return; 18 }
2.接收区的数据保存到TXT文件
1 void CportDlg::OnBnClickedButtonSavefile() //保存文件为TXT格式 2 { 3 CFileDialog savedlg(false, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, (LPCTSTR)_TEXT("TXT Files (*.txt)|*.txt|All Files (*.*)|*.*||"), NULL); 4 if (savedlg.DoModal() == IDOK){ //显示对话框并允许用户进行选择。 5 CFile fsave(savedlg.GetPathName(), CFile::modeCreate | CFile::modeReadWrite); 6 //CString转char[] 7 static char str[] = ""; int count = m_receive.GetLength(); 8 for (int i = 0; i < count; i++) 9 str[i] = m_receive[i]; 10 11 fsave.Write(str, strlen(str)); //写入文件 12 //fsave.Write(m_receive, m_receive.GetLength() * 2); //读取CString信息长度,必须*2 13 fsave.Flush(); //立即写入,不缓冲 14 fsave.Close(); //文件操作结束关闭 15 } 16 else return; 17 }
以CString类型保存的数据文件,在MFC串口打开文件发生信息丢失,所以将CString改成char[]类型。