程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> c++ 按行讀取txt文本

c++ 按行讀取txt文本

編輯:C++入門知識

CStdioFile類的聲明保存在afx.h頭文件中。
CStdioFile類繼承自CFile類,CStdioFile對象表示一個用運行時的函數fopen打開的c運行時的流式文件。流式文件是被緩沖的,而且可以以文本方式(默認)或者二進制方式打開。
CStdioFile類不支持CFile類中的Duplicate、LockRange、UnlockRange函數,如果你使用了,會得到CNotSupportedException類的錯誤。
CStringFile類默認的是按照Text模式操作文件。CFile 類默認的是按照二進制模式操作文件。
這裡大致說明一下二進制模式和Text模式的區別。
二進制模式:對於一行的結尾我們必須輸入”/r/n”,才能表示回車換行的效果。
Text模式:”/r”回車的工作是自動完成的,我們只需要寫入”/n”即可。所以我們在使用文本模式時要注意,當我們從外部讀入文件時,”/r/n”會被翻譯成”/n”,寫入文件時,我們對於回車換行只需提供”/n”,即可,”/r/n”會被寫入到文件中。
m_pStream成員變量:
      打開文件的指針。
 
構造函數:
CStdioFile();
CStdioFile(FILE *pOpenStream);
CStdioFile(LPCTSTR lpFileName, UINT nOpenFlags);
throw(CFileException);
FILE *pOpenStream:指的是c運行函數fopen調用後返回的文件指針。
LPCTSTR lpFileName:指的是被打開的文件(絕對地址或相對地址)
UINT nOpenFlags:指的是CFile類中所描述的打開文件的方式。
 
virtual LPTSTR ReadString(LPTSTR lpsz, UINT nMax);
throw(CFileException);
如果使用該函數讀取文本文件,當遇到”/r/n”,停止讀取,並去掉”/r”,保留”/n”,並在字符串尾部增加”/0”,nMax的長度包含有”/0”字符,
實際的分析如下:
如果nMax <= 字符數,讀取(nMax-1)個字符+0x00;
如果nMax = 字符數 + 1,讀取nMax個字符+0x00;
如果nMax > 字符數,讀取nMax個字符+0x0A(”/n”) + 0x00;
如果文件有多行,則當文件沒有讀完時,返回NOT NULL,讀到文件尾,返回NULL。
 
BOOL ReadString(CString& rString);
throw(CFileException);
讀取一行文本到rString中,遇到回車換行符停止讀取,回車和換行符均不讀到rString中,尾部也不添加”0x00”。
如果文件有多行,則當文件沒有讀完時,返回TRUE,讀到文件尾,返回FALSE。
 
virtual void WriteString(LPTSTR lpsz);
throw(CFileException);
將緩沖區中的數據寫入到與CStdioFile對象相關聯的文件中,不支持CString類型數據寫入,結束的”/0”不被寫入到文件中,lpsz緩沖區中的所有換行符被替換為回車換行符即”/n”轉換為”/r/n”。
 
 
[cpp]
void CDemoDlg::OnReadFile()  

    CListBox* pListBox = (CListBox*)GetDlgItem(IDC_LIST); 
    pListBox->ResetContent(); 
 
    //創建文件對話框  
    CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY |  
        OFN_OVERWRITEPROMPT, _T("文本文件(*.*)|*.*||")); 
 
    if (dlg.DoModal() == IDOK) 
    { 
        //獲得文件路徑  
        CString strPathName = dlg.GetPathName(); 
 
        CStdioFile file; 
 
        //打開文件  
        if (!file.Open(strPathName, CFile::modeRead)) 
        { 
            ::AfxMessageBox(_T("文件打開失敗。")); 
            return; 
        } 
 
        //讀文件  
        CString strText = _T(""); 
        while (file.ReadString(strText)) 
        { 
            pListBox->AddString(strText); 
        } 
 
        //關閉文件  
        file.Close(); 
    } 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved