这是一个最简单的实例,这是一个自己从来未曾使用过的内存分配实例,这是一个自己从未曾保存文件的实例,这是一个出现内存错误的实例 /*以下代码将文件的内容转存进其他的文件 在这里注意以下几点: 1.尝试理解捕获打开文件异常,同时知道如何捕获异常 2.如何动态分配内存空间,以及在使用完毕后释放 3.如何正确使用MFC提供的文件对话框 */ //以下的代码是:将文件的内容转存进另一个指定的文件 void CMyDlg::OnSavebutton() { // TODO: Add your control notification handler code here CFile file; CString m_path="D:\\test.txt"; if(!file.Open(m_path,CFile::modeRead)) { MessageBox("Opening file error1!"); return ; } int len=file.GetLength(); // char* buffer=new char[len+1];//容易导致缓冲区溢出 问题在于下面使用了buffer[len]=‘\0‘;,已经再次提醒自己 if(!buffer) { MessageBox("Allocating fail!"); return; } else { // 认真检测查看程序如何实现文件的异常处理 try { file.Read(buffer,len); } catch(CFileException* e) { MessageBox("Reading file error"); file.Close(); e->Delete(); return ; } // buffer[len]=‘\0‘; } file.Close(); m_path="d:\\total.txt"; if(!file.Open(m_path,CFile::modeWrite|CFile::modeCreate)) { MessageBox("Opening file error2"); return ; } file.SeekToEnd();//将文件指针指向文件末尾,进行写入 file.Write(buffer,len); file.Close(); delete buffer; } //打开文件,读取进编辑框中 void CMyDlg::OnRead() { // TODO: Add your control notification handler code here CFile file; if(!file.Open("D:\\test.txt",CFile::modeRead)) { MessageBox("Opening file error!"); return ; } int len=file.GetLength(); char* buffer=new char[len+1]; if(!buffer) { MessageBox("Allocating fail"); return ; } else { try { file.Read(buffer,len); } catch(CFileException* e) { MessageBox("Reading file error"); file.Close(); e->Delete(); return; } } buffer[len]=‘\0‘; m_note=buffer; delete buffer; file.Close(); UpdateData(FALSE); } void CMyDlg::OnSavepath() { // TODO: Add your control notification handler code here CString msg="File save error"; CFileDialog dlg(true,"TXT",NULL,NULL,"Text file(*.txt)|*.TXT"); //CFileDialog dlg(true,NULL,NULL,NULL,NULL); if(dlg.DoModal()==IDOK) { m_path=dlg.GetPathName(); } else { MessageBox(msg); } }
时间: 2024-11-08 20:31:37