MFC之文件读取与写入

本篇博文主要简要介绍用CFileDialog类从指定目录获取文件路径,并对文件进行读写。对文件的操作介绍了两个类,非别是FILE和CStdioFile类。

首先用MFC向导创建一个对话框程序,然后声明需要使用的变量

private:
	CFileDialog *m_filedlg;      //文件对话框
	CString strPath;             //保存文件路径
	FILE *m_file;
	CStdioFile m_fileRead;
然后定义“打开文件”按钮的响应函数

void CCfileDlgDlg::OnBtnOpenFile() 
{
	// TODO: Add your control notification handler code here
	CString fileType = "源文件(*.cpp;*.h)|*.txt;*.h|动态库文件(*.dll)|*.dll||";
	char logPath[50] = "c:\\logfile.txt";
	
	m_filedlg = new CFileDialog(TRUE, NULL, "打开文件", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_ALLOWMULTISELECT, fileType);
	if (IDOK == m_filedlg->DoModal())
	{
		//将选择的多个文件的路径写入到c:\\logfile.txt
		POSITION pos = m_filedlg->GetStartPosition();
		m_file = fopen((const char*)logPath, "a");
		while(TRUE)
		{
			strPath = m_filedlg->GetNextPathName(pos)+"\n";
			if (NULL != pos)
			{   //此文件不是最后一个被选中的文件
				fputs(strPath.GetBuffer(0), m_file);
			}
			else
			{
				//最后一个被选中的文件
				fputs(strPath.GetBuffer(0), m_file);
				fclose(m_file);
				break;
			}
		}
	}
}
然后创建“读文件”按钮的响应函数,将选择的文件读入到下面的编辑控件中,注意,由于对话框添加了一个RichEdit控件,可能导致对话框无法显示。

解决方法:在C**App类的成员函数InitInstance中添加AfxInitRichEdit();  //调用RichEdit的初始化函数

void CCfileDlgDlg::OnBtnRead() 
{
	// TODO: Add your control notification handler code here
	m_filedlg = new CFileDialog(TRUE, NULL, "打开文件", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "文本文件(*.txt)|*.txt||");
	if (IDOK == m_filedlg->DoModal())
	{
		//获取选中文件的路径
		CString path = m_filedlg->GetPathName();
		CString strData;
		if (m_fileRead.Open(path, CFile::modeRead))
		{
			//得到文件大小
            int len = m_fileRead.GetLength();
			char *buff = new char[len+1];
			//将文件内容读到内存
			m_fileRead.Read(buff, len);
			buff[len] = '\0';
			strData.Format("%s", buff);
		}	
		else
		{
            MessageBox("open file failure!");
			return;
		}
		SetDlgItemText(IDC_RICHEDIT1, strData);
	}
}

运行程序,点击读文件


选中文件后,编辑框显示文件内容如下:


猜你喜欢

转载自blog.csdn.net/GK_2014/article/details/46354215