CStdioFile的用法詳細(xì)解析
關(guān)于CStdioFile
CStdioFile繼承自CFile,一個CStdioFile 對象代表一個用運行時函數(shù)fopen 打開的C 運行時流式文件。
流式文件是被緩沖的,而且可以以文本方式(缺?。┗蚨M(jìn)制方式打開。文本方式提供對硬回車—換行符對的特殊處理。當(dāng)你將一個換行符(0x0A)寫入一個文本方式的CStdioFile 對象時,字節(jié)對(0x0D,0x0A)被發(fā)送給該文件。當(dāng)你讀一個文件時,字節(jié)對(0x0D,0x0A)被翻譯為一個字節(jié)(0x0A)。
CStdioFile 不支持Duplicate,LockRange,和UnlockRange 這幾個CFile 函數(shù)。如果在CStdioFile 中調(diào)用了這幾個函數(shù),將會出現(xiàn)CNoSupported 異常。
CStdioFile::ReadString(LPTSTR lpsz, UINT nMax);
讀取一行文本到緩沖區(qū),遇到“0x0D,0x0A”時停止讀取,并且去掉硬回車“0x0D”,保留換行符“0x0A”,在字符串末尾添加“\0”(0x00)。nMax個字符里包含0x00這個字符。
分析如下:
1)如果nMax <= 字符數(shù),讀取(nMax-1)個字符 + 0x00
2)如果nMax = 字符數(shù) + 1,讀取nMax個字符 + 0x00
3)如果nMax > 字符數(shù),讀取nMax個字符 + 0x0A + 0x00
CStdioFile::ReadString(CString &rString);(重載)
讀取一行文本到rString,遇到回車換行符停止讀取?;剀嚭蛽Q行符不讀到rString,而且末尾也沒有添加“\0”。
CStdioFile::WriteString( LPCTSTR lpsz );(不支持CString直接寫入)
將一個緩沖區(qū)中的數(shù)據(jù)寫入與CStdioFile 對象關(guān)聯(lián)的文件中。結(jié)束的空字符(“\0”)不被寫入該文件。lpsz 中的所有換行符都被以一個硬回車換行符對寫入該文件,即“\n”被轉(zhuǎn)化成“\r\n”寫入到文件里。
CFile的派生類CStdioFile提供了對文件進(jìn)行流式的操作功能。其中函數(shù)void CStdioFile::WriteString( LPCTSTR lpsz )寫入一個字符串,需要給字符串lpsz的末尾加上換行標(biāo)志”\r\n”;函數(shù)bool CStdioFile::ReadString(CString &rString )從文件中讀取一行,如果文件未讀完返回true,否則返回false。
比如:寫入文件的例子
//創(chuàng)建文件
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 );
//關(guān)閉文件
file.Close();
比如:讀文件的例子
CString strText = “”;
CString szLine = “”;
//打開文件
CStdioFile file;
file.Open("ts.txt",CFile::modeRead);
//逐行讀取字符串
while( file.ReadString( szLine ) )
{
strText += szLine;
}
MessageBox(strText);
//關(guān)閉文件
file.Close();
CStdioFile類的聲明保存再afx.h頭文件中。
CStdioFile類不支持CFile類中的Duplicate、LockRange、UnlockRange函數(shù),如果你使用了,會得到CNotSupportedException類的錯誤。
CStringFile類默認(rèn)的是按照Text模式操作文件。CFile 類默認(rèn)的是按照二進(jìn)制模式操作文件。
這里大致說明一下二進(jìn)制模式和Text模式的區(qū)別。
二進(jìn)制模式:對于一行的結(jié)尾我們必須輸入”\r\n”,才能表示回車換行的效果。
Text模式:”\r”回車的工作是自動完成的,我們只需要寫入”\n”即可。所以我們再使用文本模式時要主要,當(dāng)我們從外部讀入文件時,”\r\n”會被翻譯成”\n”,寫入文件時,我們對于回車換行只需提供”\n”,即可,”\r\n”會被寫入到文件中。
m_pStream成員變量:
打開文件的指針。
構(gòu)造函數(shù):
CStdioFile();
CStdioFile(FILE *pOpenStream);
CStdioFile(LPCTSTR lpFileName, UINT nOpenFlags);
throw(CFileException);
FILE *pOpenStream:指的是c運行函數(shù)fopen調(diào)用后返回的文件指針。
LPCTSTR lpFileName:指的是被打開的文件(絕對地址或相對地址)
UINT nOpenFlags:指的是CFile類中所描述的打開文件的方式。
virtual LPTSTR ReadString(LPTSTR lpsz, UINT nMax);
throw(CFileException);
如果使用該函數(shù)讀取文本文件,當(dāng)遇到”\r\n”,停止讀取,并去掉”\r”,保留”\n”,并在字符串尾部增加”\0”,nMax的長度包含有”\0”字符,
實際的分析如下:
如果nMax <= 字符數(shù),讀取(nMax-1)個字符+0x00;
如果nMax = 字符數(shù) + 1,讀取nMax個字符+0x00;
如果nMax > 字符數(shù),讀取nMax個字符+0x0A(”\n”) + 0x00;
如果文件有多行,則當(dāng)文件沒有讀完時,返回NOT NULL,讀到文件尾,返回NULL。
BOOL ReadString(CString& rString);
throw(CFileException);
讀取一行文本到rString中,遇到回車換行符停止讀取,回車和換行符均不讀到rString中,尾部也不添加”0x00”。
如果文件有多行,則當(dāng)文件沒有讀完時,返回TRUE,讀到文件尾,返回FALSE。
virtual void WriteString(LPTSTR lpsz);
throw(CFileException);
將緩沖區(qū)中的數(shù)據(jù)寫入到與CStdioFile對象相關(guān)聯(lián)的文件中,不支持CString類型數(shù)據(jù)寫入,結(jié)束的”\0”不被寫入到文件中,lpsz緩沖區(qū)中的所有
上一篇:淺析Boost智能指針:scoped_ptr shared_ptr weak_ptr
欄 目:C語言
下一篇:C++中四種對象生存期和作用域以及static的用法總結(jié)分析
本文標(biāo)題:CStdioFile的用法詳細(xì)解析
本文地址:http://www.jygsgssxh.com/a1/Cyuyan/4157.html
您可能感興趣的文章
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)式函數(shù)庫
- 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對數(shù)怎么表達(dá)
- 04-02C語言中怎么打出三角函數(shù) c語言中怎么打出三角函數(shù)的值
- 01-10c語言求1+2+...+n的解決方法
- 01-10求子數(shù)組最大和的解決方法詳解
- 01-10深入理解約瑟夫環(huán)的數(shù)學(xué)優(yōu)化方法
- 01-10深入二叉樹兩個結(jié)點的最低共同父結(jié)點的詳解
- 01-10數(shù)據(jù)結(jié)構(gòu)課程設(shè)計- 解析最少換車次數(shù)的問題詳解
- 01-10c語言 跳臺階問題的解決方法
- 01-10如何判斷一個數(shù)是否為2的冪次方?若是,并判斷出來是多少次方


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機(jī)閱讀
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-10delphi制作wav文件的方法
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-11ajax實現(xiàn)頁面的局部加載
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 04-02jquery與jsp,用jquery
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-10C#中split用法實例總結(jié)


