最近寫了一個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[]類型。