留言板编程(CFile函数与动态分配)

这是一个最简单的实例,这是一个自己从来未曾使用过的内存分配实例,这是一个自己从未曾保存文件的实例,这是一个出现内存错误的实例
/*以下代码将文件的内容转存进其他的文件
在这里注意以下几点:
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);
  }
}

你可能感兴趣的:(return,动态,对话框,control,留言板)