-
CStdioFile
鎖定
CStdioFile繼承自CFile,它可以建立一個CStdioFile 對象,代表一個用運行時函數fopen 打開的C 運行時流式文件。
- 外文名
- CStdioFile
- 流式文件
- 被緩衝
- 代 表
- 運行時函數打開的C流式文件
- 不支持
- Duplicate,LockRange
CStdioFile定義
表示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();
CStdioFile( CAtlTransactionManager* pTM);
CStdioFile( FILE* pOpenStream );//參數(pOpenStream)是c運行函數fopen調用後返回的文件指針。
CStdioFile( LPCTSTR lpszFileName,UINT nOpenFlags );
CStdioFile( LPCTSTR lpszFileName)//(lpszFileName)是被打開的文件(絕對地址或相對地址)
CStdioFile參數解釋
LPCTSTR lpszFileName,//被打開的文件的路徑(絕對地址或相對地址);
FILE* pOpenStream;//c運行函數fopen調用後返回的文件指針;
UINT nOpenFlags; //指的是CFile類中所描述的打開文件的方式。可以按位指定多個選項通過使用或(|)運算符;
CAtlTransactionManager* pTM;//為CAtlTransactionManager對象的指針。
CStdioFile成員函數
CStdioFile::Open(LPCTSTR lpszFileName,UINT nOpenFlags,CFileException* pError = NULL);
參數解釋見構造函數。
當對象定義時未給出構造函數參數,則調用第一個構造函數,此時需要調用open函數打開文件。
CStdioFile::ReadString(LPTSTR lpsz, UINT nMax);
參數:
lpsz;//指定指向將接收文本字符串的用户提供的緩衝區的指針,以null字符終止;
nMax;//指定能接受的最大字符數限制,以null字符終止;
返回值:
如果文件有多行,則當文件沒有讀完時,返回TRUE,讀到文件尾,返回FALSE。
説明:
(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程序例
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();
CStdioFile聲明
此詞條定義是不完整的,完善詞條請參考MSDN定義。編輯中參考網絡部分解釋,如有侵權請立即聯繫。
CStdioFile使用
(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();