a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C > 正文

詳細解析CStdioFile的操作方法

2020-02-24 14:27:38
字體:
來源:轉載
供稿:網友

cstdiofile是cfile的派生,它是流式傳輸文件,對讀取和寫入文本文件很有用,那么詳細解析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緩沖區中的所有

以上就是關于詳細解析CStdioFile的操作方法,現在你了解了吧?歡迎你隨時來關注武林技術頻道,最專業的技術知識盡在這里。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 中文无码久久精品 | 亚洲 欧美 综合 | 日本a在线 | 国产精品毛片在线看 | 精品久久久久久久 | 黄色毛片观看 | 成人午夜视频在线观看 | 国产极品一区 | 成人av片在线观看 | 一个色影院 | 99久久国产综合精品女不卡 | 殴美一区| 99久久久99久久国产片鸭王 | 久久久久久久久一区 | 久久99精品久久久久久琪琪 | 97久久香蕉国产线看观看 | 成人三级影院 | 91精品久久久久久久久入口 | 精品一区二区久久久久久久网站 | 超碰97在线免费观看 | 91在线观看 | gav成人免费播放视频 | 日韩精品专区在线影院重磅 | 国产成人午夜片在线观看高清观看 | 亚洲国产精品一区 | 亚洲精品久久久 | 成人一区二区三区在线观看 | 免费在线黄色av | 日韩在线观看成人 | 成人在线免费视频 | 久久久夜夜夜 | 日本不卡在线 | 久久久久久高潮国产精品视 | 久久久久综合狠狠综合日本高清 | 杏导航aⅴ福利网站 | 欧美日韩亚洲在线 | 欧美视频免费在线 | 97av在线| 亚洲国产精品久久久久 | 亚洲一区中文字幕在线观看 | 人人澡人人草 |