MFC 按行读取文件中的内容

本文详细介绍使用MFC从文件中读取内容的过程,包括选择文件、打开文件、读取每一行并显示在编辑框中,特别注意MFC中换行符的正确使用。

本文转载连接: http://blog.sina.com.cn/s/blog_8d3a834d01015fd8.html

 

使用MFC读取文件中的内容是程序设计中经常用到的功能,我也使用过还几次了,但是每一次写的时候还是会出现很多的问题,所以将每次出现的问题,记录下来,保存运行正确的程序,这样,下一次写程序的时候就会少走弯路。

CFileDialog cFileDialog( TRUE, NULL, NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,
    "All Files (*.*)|*.*||", AfxGetMainWnd());//第1步 取得路径

 CString strFilePath = "";

 CString strFileName = "";

 if(cFileDialog.DoModal()==IDOK)
 {
  m_strFilePath = cFileDialog.GetPathName();

  strFileName = cFileDialog.GetFileName();
 
  UpdateData(false);
 }

  int input = 0;

 
  ifstream   inout;
  
  inout.open(strFileName,ios::in);

 if(!inout)
 {
  cerr<<"Unable to open file!"<<endl;
 }
 else
 {
  cout<<"打开文件成功"<<endl;
 }

 char nextline[256];
 CString temp_str = "";

 CString m_temp = "";


 while(inout.getline(nextline, sizeof(nextline)))
 {

  
  temp_str = nextline;


  m_temp += temp_str;

  m_temp += "\r\n";  //MFC的编辑框需要使用“\r\n”来识别换行,单单一个“\n”是不够的。

  
 }

 m_original = m_temp ;
  AfxMessageBox(m_original);

  UpdateData(false);

  inout.close();
  inout.clear();

MFC读取文件可使用CStdioFile类,该类派生自CFile类,增加了按的方式读取/写入文件字符串的功能,实现按读取字符串用这个类较为合适[^3]。以下是一个使用CStdioFile类按读取文件的示例步骤及代码: ### 示例步骤 1. **用户界面交互**:通过菜单、按钮或对话框等方式触发文件读取操作。 2. **文件路径选择**:调用CFileDialog让用户选择要读取文件。 3. **文件打开与资源获取**:使用CStdioFile打开文件。 4. **数据读取与解析**:逐读取文本内容。 5. **数据显示或处理**:将读取内容显示在控件中(如CEditView、CRichEditCtrl)或进进一步的数据处理。 6. **资源释放与异常处理**:确保在操作结束后正确关闭文件并释放资源,同时处理可能出现的异常。 ### 示例代码 ```cpp void CMyDlg::OnReadFile() { // 1. 文件路径选择 CFileDialog dlg(TRUE, _T("txt"), NULL, 0, _T("文本文件 (*.txt)|*.txt|所有文件 (*.*)|*.*||")); if (dlg.DoModal() == IDOK) { CString strFilePath = dlg.GetPathName(); // 2. 文件打开与资源获取 CStdioFile file; if (file.Open(strFilePath, CFile::modeRead | CFile::typeText)) { CString strLine; CString strAllText; // 3. 数据读取与解析 while (file.ReadString(strLine)) { // 逐读取文件内容 strAllText += strLine + _T("\n"); } // 4. 数据显示或处理 CRichEditCtrl* pRichEdit = (CRichEditCtrl*)GetDlgItem(IDC_RICHEDIT1); if (pRichEdit) { pRichEdit->SetWindowText(strAllText); } // 5. 资源释放 file.Close(); } else { // 异常处理 AfxMessageBox(_T("无法打开文件!")); } } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值