CStdioFile

CStdioFile

CStdioFile繼承自CFile,它可以建立一個CStdioFile 對象,代表一個用運行時函式fopen 打開的C 運行時流式檔案。

定義

表示c.運行時流檔案標記為打開該運行時函式fopen。

流式檔案是被緩衝載入到記憶體中的,而且可以以文本方式(預設)或二進制方式打開。文本方式提供對硬回車— 換行符對的特殊處理。當你將一個換行符(0x0A)寫入一個文本方式的CStdioFile 對象時,位元組對(0x0D,0x0A)被傳送給該檔案。當你讀一個檔案時,位元組對(0x0D,0x0A)被翻譯為一個換行符(0x0A)。

CStdioFile 不支持Duplicate,LockRange,和UnlockRange 這幾個CFile 函式。如果在CStdioFile 中調用了這幾個函式,將會出現CNoSupported 異常。

CStdioFile類默認的是按照Text模式操作檔案,CFile 類默認的是按照二進制模式操作檔案。

二進制模式:對於一行的結尾我們必須輸入'\r\n',才能表示回車換行的效果。

Text模式:'\r'回車的工作是自動完成的,我們只需要寫入'\n'即可。在使用Text模式時從外部讀入檔案時,'\r\n'會被翻譯成'\n',寫入檔案時,我們對於回車換行只需提供'\n',即可,'\r\n'會被寫入到檔案中。

構造函式

CStdioFile();

CStdioFile( CAtlTransactionManager* pTM);

CStdioFile( FILE* pOpenStream );//參數(pOpenStream)是c運行函式fopen調用後返回的檔案指針。

CStdioFile( LPCTSTR lpszFileName,UINT nOpenFlags );

CStdioFile( LPCTSTR lpszFileName)//(lpszFileName)是被打開的檔案(絕對地址或相對地址)

參數解釋

LPCTSTR lpszFileName,//被打開的檔案的路徑(絕對地址或相對地址);

FILE* pOpenStream;//c運行函式fopen調用後返回的檔案指針;

UINT nOpenFlags; //指的是CFile類中所描述的打開檔案的方式。可以按位指定多個選項通過使用或(|)運算符;

CAtlTransactionManager* pTM;//為CAtlTransactionManager對象的指針。

成員函式

CStdioFile::Open(LPCTSTR lpszFileName,UINT nOpenFlags,CFileException* pError = NULL);

參數解釋見構造函式。

當對象定義時未給出構造函式參數,則調用第一個構造函式,此時需要調用open函式打開檔案。

CStdioFile::ReadString(LPTSTR lpsz, UINT nMax);

參數:

lpsz;//指定指向將接收文本字元串的用戶提供的緩衝區的指針,以null字元終止;

nMax;//指定能接受的最大字元數限制,以null字元終止;

返回值:

如果檔案有多行,則當檔案沒有讀完時,返回TRUE,讀到檔案尾,返回FALSE。

說明:

讀取一行文本到緩衝區,遇到“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;// CString類的字元串

返回值:

如果檔案有多行,則當檔案沒有讀完時,返回TRUE,讀到檔案尾,返回FALSE。

說明:

讀取一行文本到rString中,遇到回車換行符停止讀取,回車和換行符均不讀到rString中,尾部添加”0x00”。

CStdioFile::WriteString( LPCTSTR lpsz );(不支持CString直接寫入)

將一個緩衝區中的數據寫入與CStdioFile 對象關聯的檔案中。結束的空字元(“\0”)不被寫入該檔案。lpsz 中的所有換行符都被以一個硬回車換行符對寫入該檔案,即“\n”被轉化成“\r\n”寫入到檔案里。

CStdioFile::Seek( LONGLONG lOff, UINT nFrom );

重新定位以前打開的檔案的指針。

參數:

Off;//移動指針的位元組數。

nFrom;//指針移到模式。必須為下列值之一:

•CFile::begin:從檔案開始將檔案指針 移動lOff位元組。

•CFile::current:從當前位置將檔案指針移動lOff位元組。

•CFile::end:從檔案的結尾將檔案指針移動lOff。

•Note thatlOffmust be negative to seek into the existing file; positive values will seek past the end of the file. 返回值:

•如果請求的位置是非法的,Seek將會從檔案的開始返回新的位元組偏移量。否則,返回值是未定義的,並引發CFileException對象。

程式例

CStdioFile file;

•file.Open("ts.txt",CFile::modeCreate|CFile::modeWrite);//寫入檔案

•CString str;

•str.Format("%s\r\n","hello!I am talkingmute!");(在末尾添加\r\n會導致寫出來的文檔修改後出現格式錯亂,只能寫\n)

•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();

聲明

•此詞條定義是不完整的,完善詞條請參考MSDN定義。編輯中參考網路部分解釋,如有侵權請立即聯繫。

使用

讀取一行文本到緩衝區,遇到“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!");(在末尾添加\r\n會導致寫出來的文檔修改後出現格式錯亂,只能寫\n)

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();

相關詞條

相關搜尋

熱門詞條

聯絡我們