CStdioFile的用法具體解析。本站提示廣大學習愛好者:(CStdioFile的用法具體解析)文章只能為提供參考,不一定能成為您想要的結果。以下是CStdioFile的用法具體解析正文
關於CStdioFile
CStdioFile繼續自CFile,一個CStdioFile 對象代表一個用運轉時函數fopen 翻開的C 運轉時流式文件。
流式文件是被緩沖的,並且可以以文本方法(缺省)或二進制方法翻開。文本方法供給對硬回車—換行符對的特別處置。當你將一個換行符(0x0A)寫入一個文本方法的CStdioFile 對象時,字節對(0x0D,0x0A)被發送給該文件。當你讀一個文件時,字節對(0x0D,0x0A)被翻譯為一個字節(0x0A)。
CStdioFile 不支撐Duplicate,LockRange,和UnlockRange 這幾個CFile 函數。假如在CStdioFile 中挪用了這幾個函數,將會湧現CNoSupported 異常。
CStdioFile::ReadString(LPTSTR lpsz, UINT nMax);
讀取一行文本到緩沖區,碰到“0x0D,0x0A”時停滯讀取,而且去失落硬回車“0x0D”,保存換行符“0x0A”,在字符串末尾添加“\0”(0x00)。nMax個字符裡包括0x00這個字符。
剖析以下:
1)假如nMax <= 字符數,讀取(nMax-1)個字符 + 0x00
2)假如nMax = 字符數 + 1,讀取nMax個字符 + 0x00
3)假如nMax > 字符數,讀取nMax個字符 + 0x0A + 0x00
CStdioFile::ReadString(CString &rString);(重載)
讀取一行文本到rString,碰到回車換行符停滯讀取。回車和換行符不讀到rString,並且末尾也沒有添加“\0”。
CStdioFile::WriteString( LPCTSTR lpsz );(不支撐CString直接寫入)
將一個緩沖區中的數據寫入與CStdioFile 對象聯系關系的文件中。停止的空字符(“\0”)不被寫入該文件。lpsz 中的一切換行符都被以一個硬回車換行符對寫入該文件,即“\n”被轉化成“\r\n”寫入到文件裡。
CFile的派生類CStdioFile供給了對文件停止流式的操作功效。個中函數void CStdioFile::WriteString( LPCTSTR lpsz )寫入一個字符串,須要給字符串lpsz的末尾加上換行標記”\r\n”;函數bool CStdioFile::ReadString(CString &rString )從文件中讀取一行,假如文件未讀完前往true,不然前往false。
好比:寫入文件的例子
//創立文件
CStdioFile file;
file.Open("ts.txt",CFile::modeCreate|CFile::modeWrite);
//寫入文件
CString str;
str.Format("%s\r\n","hello!I am talkingmute!");
file.Seek(0,CFile::end);
file.WriteString( str );
//封閉文件
file.Close();
好比:讀文件的例子
CString strText = “”;
CString szLine = “”;
//翻開文件
CStdioFile file;
file.Open("ts.txt",CFile::modeRead);
//逐行讀取字符串
while( file.ReadString( szLine ) )
{
strText += szLine;
}
MessageBox(strText);
//封閉文件
file.Close();
CStdioFile類的聲明保留再afx.h頭文件中。
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緩沖區中的一切