MFC读写文件相关操作

一.CFile与CStdioFile的区别

1.CFile类,操作文件默认是Binary模式,CStdioFile类操作文件默认是Text模式在Binary模式下我们必须输入'\r\n',才能起到回车换行的效果,'\r'只是回车(回到当前行的第一列),'\n'只是换行(到达下一行的当前列)。而在Text模式下'\r'的工作是自动完成的,当我们写一个'\n'的时候,系统会自动帮我们在其前面加上一个'\r',然后保存到文件里。另外,CFile::typeText只能在CFile的子类中使用,CFile自身的Read函数不能使用CFile::typeText和CFile::typeBinary
2.File   是C和C++的函数! mfc中使用了CFile类进行相同的文件操作功能! CStdioFile继承了CFile   是CFile的子类,扩展了文本文件的操作,认识回车换行字符,可以进行一行字符串的读写! 
3.Cfile类提供了基于二进制流的文件操作,功能类似于C语言中的fread()和fwrite()函数。CStdioFile提供了基于字符串流的文件操作,功能类似于C语言中的fgets()和fputs()函数。
4.CStdioFile继承了CFile类,特有的函数是ReadString(),WriteString(),但是不支持Duplicate(),Lockrange(),UnLockRange(),相当于流式文件的操作

二.读写文件

void COpenfileDlg::OnFileOpen() 
{
	CFileDialog fo(TRUE,"*.txt","打开文件",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"文本文件(*.txt)|*.txt|所有文件|*.*||)");
	if(IDCANCEL == fo.DoModal())
		return;
	CString path = fo.GetPathName();
	CFile file;
	if(!file.Open(path,CFile::modeRead))
	{
		AfxMessageBox("文件打开失败!");
		return;
	}
	DWORD Len = file.GetLength();	//此长度是纯文本的长度
	char * pBuf = new char[Len+1];	//此处设置Len+1,为在结尾加上0作为结束符
	file.Read(pBuf,Len);
	pBuf[Len] = 0;//	将非正文最后一位置零,遇到0结束,不再往下读,否则会读到错误的字节
	SetDlgItemText(IDC_TEXT,pBuf);
	file.Close();
	delete pBuf;
}

void COpenfileDlg::OnFileSave() 
{
	CFileDialog fo(FALSE,"*.txt","保存文件",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"文本文件(*.txt)|*.txt|所有文件|*.*||)");
	if(IDCANCEL == fo.DoModal())
		return;
	CString path = fo.GetPathName();
	//方法一:CFile
/*	CFile file;
	if(!file.Open(path,CFile::modeWrite|CFile::modeCreate))
	{
		AfxMessageBox("文件打开失败!");
		return;
	}
	CWnd * pWnd = GetDlgItem(IDC_TEXT);
	int Len = pWnd->GetWindowTextLength();
	char * pBuf = new char[Len+1];//此处设置Len+1,为隔行做伏笔

	pBuf[Len] = 0;//	将非正文最后一位置零,遇到0结束,不再往下读,否则会写入错误的字节	
	pWnd->GetWindowText(pBuf,Len+1);
	file.Write(pBuf,Len);
	file.Close();
	delete pBuf;*/	
	
	//方法二CStdioFile
	CString strEdit1;
	GetDlgItemText(IDC_TEXT, strEdit1);//获取指定ID的编辑框内
	CStdioFile file;
	if(file.Open(path, CStdioFile::modeCreate | CStdioFile::typeBinary | CStdioFile::modeWrite))
	{
		file.WriteString(strEdit1);
		file.Close();
	}
}









  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值