MFC 中 CFile、CStdioFile、CFileDialog 的用法

//读文件数据
void CFileOperDlg::OnButtonRead() 
{
 // TODO: Add your control notification handler code here

 CFile file;
 CString FileName="data.txt";
 char buf[1000];//读1K
 memset(buf,0,1000);//初始化内存,防止读出字符末尾出现乱码
 try
 {
  if(!file.Open(FileName,CFile::modeRead))
  {
   MessageBox("没有文件!");
   return;
  }
  file.Read(buf,sizeof(buf));
  file.Close();
  m_data=buf;//给文本框赋值CString m_data
  UpdateData(false);//在文本框显示
  MessageBox("读出成功!");
 }
 catch(CFileException *e)
 {
  CString str;
  str.Format("读取数据失败的原因是:%d",e->m_cause);
  MessageBox("str");
  file.Abort();
  e->Delete();
 }
}
//写文件数据
void CFileOperDlg::OnButtonWrite() 
{
 // TODO: Add your control notification handler code here
 UpdateData();//取文本框字符
 CFile file;
 CString FileName="data.txt";
 try
 {
  file.Open(FileName,CFile::modeCreate|CFile::modeWrite);
  file.SeekToBegin();
  file.Write((unsigned char *)(m_data.GetBuffer(0)),m_data.GetLength());//CString m_data
  file.Flush();
  file.Close();
  MessageBox("写入成功!");
 }
 catch(CFileException *e)
 {
  CString str;
  str.Format("写入失败的原因是:%d",e->m_cause);
  MessageBox("str");
  file.Abort();
  e->Delete();
 }
}


很简单,无须解释~

如果要追加,那么请添加 file.SeekToEnd(); 之后再写入

如果要覆盖,那么请添加 CFile::modeCreate

 

CStdioFile 继承于 CFile,可以用其实现读取写入一行的操作:

CStdioFile mFile;
if (mFile.Open("d:\\test.txt",CFile::modeReadWrite))
{
	CString strData = "";
	mFile.ReadString(strData);
	mFile.Close();
}


打开文件对话框

CFileDialog dlg(TRUE, NULL, NULL, OFN_FILEMUSTEXIST | OFN_READONLY,
	_T("MP3 Files (*.mp3)|*.mp3||"), this);
if (dlg.DoModal() == IDOK)
{
	CString tmp = dlg.GetFileName();
	// ……
}


保存文件对话框

CFileDialog dlg(
	FALSE,					// 不是打开文件,FALSE 是保存
	_T("sln"),				// 默认文件名后面,自动填充的文件拓展名,删除后保存则不会追加
	_T("HelloWorld"),			// 默认的文件名,可以是 NONAME
	OFN_CREATEPROMPT | OFN_PATHMUSTEXIST,	// 总是创建并且路径必须事先存在
	_T("解决方案文件 (*.sln)|*.sln||"),	// 默认创建的文件类型,只要不是 *.*,那么拓展名会被自动追加
	this);					// 模式对话框的父窗口句柄
	if (dlg.DoModal() == IDOK)
	{
		CString tmp = dlg.GetFileExt();
		tmp = dlg.GetFileName();
		tmp = dlg.GetFileTitle();
		tmp = dlg.GetFolderPath();
		tmp = dlg.GetPathName();
	}

 


 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值