欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

CStdioFile的用法詳細(xì)解析

 更新時(shí)間:2013年09月16日 09:35:48   作者:  
CStdioFile 不支持Duplicate,LockRange,和UnlockRange 這幾個(gè)CFile 函數(shù)。如果在CStdioFile 中調(diào)用了這幾個(gè)函數(shù),將會(huì)出現(xiàn)CNoSupported 異常

關(guān)于CStdioFile
CStdioFile繼承自CFile,一個(gè)CStdioFile 對(duì)象代表一個(gè)用運(yùn)行時(shí)函數(shù)fopen 打開(kāi)的C 運(yùn)行時(shí)流式文件。

流式文件是被緩沖的,而且可以以文本方式(缺?。┗蚨M(jìn)制方式打開(kāi)。文本方式提供對(duì)硬回車(chē)—換行符對(duì)的特殊處理。當(dāng)你將一個(gè)換行符(0x0A)寫(xiě)入一個(gè)文本方式的CStdioFile 對(duì)象時(shí),字節(jié)對(duì)(0x0D,0x0A)被發(fā)送給該文件。當(dāng)你讀一個(gè)文件時(shí),字節(jié)對(duì)(0x0D,0x0A)被翻譯為一個(gè)字節(jié)(0x0A)。

CStdioFile 不支持Duplicate,LockRange,和UnlockRange 這幾個(gè)CFile 函數(shù)。如果在CStdioFile 中調(diào)用了這幾個(gè)函數(shù),將會(huì)出現(xiàn)CNoSupported 異常。
CStdioFile::ReadString(LPTSTR lpsz, UINT nMax);

讀取一行文本到緩沖區(qū),遇到“0x0D,0x0A”時(shí)停止讀取,并且去掉硬回車(chē)“0x0D”,保留換行符“0x0A”,在字符串末尾添加“\0”(0x00)。nMax個(gè)字符里包含0x00這個(gè)字符。

分析如下:
1)如果nMax <= 字符數(shù),讀取(nMax-1)個(gè)字符 + 0x00
2)如果nMax    = 字符數(shù) + 1,讀取nMax個(gè)字符 + 0x00
3)如果nMax    > 字符數(shù),讀取nMax個(gè)字符 + 0x0A + 0x00

CStdioFile::ReadString(CString &rString);(重載)
讀取一行文本到rString,遇到回車(chē)換行符停止讀取?;剀?chē)和換行符不讀到rString,而且末尾也沒(méi)有添加“\0”。
CStdioFile::WriteString( LPCTSTR lpsz );(不支持CString直接寫(xiě)入)

將一個(gè)緩沖區(qū)中的數(shù)據(jù)寫(xiě)入與CStdioFile 對(duì)象關(guān)聯(lián)的文件中。結(jié)束的空字符(“\0”)不被寫(xiě)入該文件。lpsz 中的所有換行符都被以一個(gè)硬回車(chē)換行符對(duì)寫(xiě)入該文件,即“\n”被轉(zhuǎn)化成“\r\n”寫(xiě)入到文件里。

CFile的派生類(lèi)CStdioFile提供了對(duì)文件進(jìn)行流式的操作功能。其中函數(shù)void CStdioFile::WriteString( LPCTSTR lpsz )寫(xiě)入一個(gè)字符串,需要給字符串lpsz的末尾加上換行標(biāo)志”\r\n”;函數(shù)bool CStdioFile::ReadString(CString &rString )從文件中讀取一行,如果文件未讀完返回true,否則返回false。 

比如:寫(xiě)入文件的例子

復(fù)制代碼 代碼如下:

//創(chuàng)建文件
CStdioFile file;
file.Open("ts.txt",CFile::modeCreate|CFile::modeWrite);
//寫(xiě)入文件
CString str;
str.Format("%s\r\n","hello!I am talkingmute!");
file.Seek(0,CFile::end);
file.WriteString( str );
//關(guān)閉文件
file.Close();

比如:讀文件的例子
復(fù)制代碼 代碼如下:

CString strText = “”;
CString szLine = “”;
//打開(kāi)文件
CStdioFile file;
file.Open("ts.txt",CFile::modeRead);
//逐行讀取字符串
while( file.ReadString( szLine ) )
{
strText += szLine;
}
MessageBox(strText);
//關(guān)閉文件
file.Close();

CStdioFile類(lèi)的聲明保存再afx.h頭文件中。
CStdioFile類(lèi)不支持CFile類(lèi)中的Duplicate、LockRange、UnlockRange函數(shù),如果你使用了,會(huì)得到CNotSupportedException類(lèi)的錯(cuò)誤。
CStringFile類(lèi)默認(rèn)的是按照Text模式操作文件。CFile 類(lèi)默認(rèn)的是按照二進(jìn)制模式操作文件。

這里大致說(shuō)明一下二進(jìn)制模式和Text模式的區(qū)別。
二進(jìn)制模式:
對(duì)于一行的結(jié)尾我們必須輸入”\r\n”,才能表示回車(chē)換行的效果。

Text模式:”\r”回車(chē)的工作是自動(dòng)完成的,我們只需要寫(xiě)入”\n”即可。所以我們?cè)偈褂梦谋灸J綍r(shí)要主要,當(dāng)我們從外部讀入文件時(shí),”\r\n”會(huì)被翻譯成”\n”,寫(xiě)入文件時(shí),我們對(duì)于回車(chē)換行只需提供”\n”,即可,”\r\n”會(huì)被寫(xiě)入到文件中。
m_pStream成員變量:
打開(kāi)文件的指針。

構(gòu)造函數(shù):
CStdioFile();
CStdioFile(FILE *pOpenStream);
CStdioFile(LPCTSTR lpFileName, UINT nOpenFlags);
throw(CFileException);

FILE *pOpenStream:指的是c運(yùn)行函數(shù)fopen調(diào)用后返回的文件指針。
LPCTSTR lpFileName:指的是被打開(kāi)的文件(絕對(duì)地址或相對(duì)地址)
UINT nOpenFlags:指的是CFile類(lèi)中所描述的打開(kāi)文件的方式。

virtual LPTSTR ReadString(LPTSTR lpsz, UINT nMax);
throw(CFileException);

如果使用該函數(shù)讀取文本文件,當(dāng)遇到”\r\n”,停止讀取,并去掉”\r”,保留”\n”,并在字符串尾部增加”\0”,nMax的長(zhǎng)度包含有”\0”字符,

實(shí)際的分析如下:
如果nMax <= 字符數(shù),讀取(nMax-1)個(gè)字符+0x00;
如果nMax = 字符數(shù) + 1,讀取nMax個(gè)字符+0x00;
如果nMax > 字符數(shù),讀取nMax個(gè)字符+0x0A(”\n”) + 0x00;
如果文件有多行,則當(dāng)文件沒(méi)有讀完時(shí),返回NOT NULL,讀到文件尾,返回NULL。

BOOL ReadString(CString& rString);
throw(CFileException);

讀取一行文本到rString中,遇到回車(chē)換行符停止讀取,回車(chē)和換行符均不讀到rString中,尾部也不添加”0x00”。
如果文件有多行,則當(dāng)文件沒(méi)有讀完時(shí),返回TRUE,讀到文件尾,返回FALSE。

virtual void WriteString(LPTSTR lpsz);
throw(CFileException);

將緩沖區(qū)中的數(shù)據(jù)寫(xiě)入到與CStdioFile對(duì)象相關(guān)聯(lián)的文件中,不支持CString類(lèi)型數(shù)據(jù)寫(xiě)入,結(jié)束的”\0”不被寫(xiě)入到文件中,lpsz緩沖區(qū)中的所有

相關(guān)文章

  • C++中虛繼承時(shí)的構(gòu)造函數(shù)示例詳解

    C++中虛繼承時(shí)的構(gòu)造函數(shù)示例詳解

    在虛繼承中,虛基類(lèi)是由最終的派生類(lèi)初始化的,換句話說(shuō),最終派生類(lèi)的構(gòu)造函數(shù)必須要調(diào)用虛基類(lèi)的構(gòu)造函數(shù),這跟普通繼承不同,在普通繼承中,派生類(lèi)構(gòu)造函數(shù)中只能調(diào)用直接基類(lèi)的構(gòu)造函數(shù),不能調(diào)用間接基類(lèi)的,所以本文將通過(guò)代碼示例給大家介紹一下C++虛繼承構(gòu)造函數(shù)
    2023-09-09
  • 從匯編看c++中引用與指針的使用分析

    從匯編看c++中引用與指針的使用分析

    在c++中,引用和指針具有相同的作用,都可以用來(lái)在函數(shù)里面給變函數(shù)外面對(duì)象或者變量的值,下面就來(lái)看他們的原理
    2013-05-05
  • C++簡(jiǎn)單實(shí)現(xiàn)shared_ptr的代碼

    C++簡(jiǎn)單實(shí)現(xiàn)shared_ptr的代碼

    智能指針用于資源管理,為了保證資源的操作得到順利的執(zhí)行防止資源泄露,因此大多數(shù)實(shí)現(xiàn)都以noexcept在參數(shù)列表后聲明為不拋出異常,這篇文章主要介紹了C++簡(jiǎn)單實(shí)現(xiàn)shared_ptr的代碼,需要的朋友可以參考下
    2022-09-09
  • QString的常用方法(小結(jié))

    QString的常用方法(小結(jié))

    這篇文章主要介紹了QString的常用方法(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • C++11系列學(xué)習(xí)之可調(diào)用對(duì)象包裝器和綁定器

    C++11系列學(xué)習(xí)之可調(diào)用對(duì)象包裝器和綁定器

    這篇文章主要介紹了C++11系列學(xué)習(xí)之可調(diào)用對(duì)象包裝器和綁定器,下文基于C++的相關(guān)資料展開(kāi)詳細(xì)內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-04-04
  • C語(yǔ)言fillpoly函數(shù)詳解

    C語(yǔ)言fillpoly函數(shù)詳解

    在C語(yǔ)言中,fillpoly函數(shù)的功能是畫(huà)一個(gè)多邊形,并且把多邊形填充。填充邊框所定義的多邊形的內(nèi)部。fillpoly 函數(shù)的用法:void far fillpoly(int numpoints, int far *polypoints);。
    2015-10-10
  • C++實(shí)現(xiàn)二維圖形的傅里葉變換

    C++實(shí)現(xiàn)二維圖形的傅里葉變換

    這篇文章主要介紹了C++實(shí)現(xiàn)二維圖形的傅里葉變換的方法,是C++程序設(shè)計(jì)里一個(gè)重要的應(yīng)用,需要的朋友可以參考下
    2014-08-08
  • C++詳細(xì)分析講解函數(shù)參數(shù)的擴(kuò)展

    C++詳細(xì)分析講解函數(shù)參數(shù)的擴(kuò)展

    在C++中,定義函數(shù)時(shí)可以給形參指定一個(gè)默認(rèn)的值,這樣調(diào)用函數(shù)時(shí)如果沒(méi)有給這個(gè)形參賦值(沒(méi)有對(duì)應(yīng)的實(shí)參),那么就使用這個(gè)默認(rèn)的值。也就是說(shuō),調(diào)用函數(shù)時(shí)可以省略有默認(rèn)值的參數(shù)
    2022-04-04
  • C語(yǔ)言中memcpy 函數(shù)的用法詳解

    C語(yǔ)言中memcpy 函數(shù)的用法詳解

    這篇文章主要介紹了C語(yǔ)言中memcpy 函數(shù)的用法詳解的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • C語(yǔ)言文件操作詳情(二)

    C語(yǔ)言文件操作詳情(二)

    這篇文章主要介紹了C語(yǔ)言文件操作詳情,文章基于上一篇文章的內(nèi)容繼續(xù)展開(kāi)C語(yǔ)言文件操作的相關(guān)詳情,需要的小伙伴可以參考一下
    2022-04-04

最新評(píng)論