C++中fstream-創(chuàng)新互聯(lián)

#include

頭文件fstream包含了ifstream、ofstream、fstream三個(gè)類(lèi),可以通過(guò)定義這三個(gè)類(lèi)的對(duì)象來(lái)實(shí)現(xiàn)相對(duì)應(yīng)的文件操作。

創(chuàng)新互聯(lián)公司是一家專注于成都網(wǎng)站制作、做網(wǎng)站與策劃設(shè)計(jì),望城網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)十余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:望城等地區(qū)。望城做網(wǎng)站價(jià)格咨詢:18980820575
#includeofstream     //文件寫(xiě)操作,內(nèi)存寫(xiě)入存儲(chǔ)設(shè)備
ifstream     //文件讀操作,存儲(chǔ)設(shè)備讀取到內(nèi)存中
fstream      //讀寫(xiě)操作,對(duì)打開(kāi)的文件可進(jìn)行讀寫(xiě)操作
1.打開(kāi)文件
  • 函數(shù) open()

public member function
 
void open ( const char * filename,
            ios_base::openmode mode = ios_base::in | ios_base::out );
 
void open(const wchar_t *_Filename,
        ios_base::openmode mode= ios_base::in | ios_base::out,
        int prot = ios_base::_Openprot);
參數(shù)filenamemodeprot
含義操作文件名打開(kāi)文件方式打開(kāi)文件屬性(應(yīng)用少)
  • 打開(kāi)文件的方式在ios類(lèi)(所有流式I/O的基類(lèi))中定義,有如下幾種方式:
ios::in為輸入(讀)而打開(kāi)文件
ios::out為輸出(寫(xiě))而打開(kāi)文件
ios::ate初始位置:文件尾
ios::app所有輸出附加在文件末尾
ios::trunc如果文件已存在先刪除文件
ios::binary二進(jìn)制方式
  • 打開(kāi)文件的方式可以單一使用或者利用“|”組合使用,例如:

ofstream outfile;
outfile.open("Hello.txt",ios::in|ios::out|ios::binary)
  • 打開(kāi)文件的屬性在ios類(lèi)中也有定義:
0普通文件,打開(kāi)文件
1只讀文件
2隱含文件
3系統(tǒng)文件

對(duì)于文件的屬性也可以利用“|”和“+”進(jìn)行組合使用

  • 如果只是使用默認(rèn)的打開(kāi)方式可以不用顯式的調(diào)用open()函數(shù),直接使用流對(duì)象進(jìn)行文件的操作,如:

ofstream out("\\\",ios::out);
ifstream in("\\\",ios::in);
fstream fil("\\\",ios::in|ios::out);

當(dāng)使用默認(rèn)的方式對(duì)文件進(jìn)行打開(kāi)時(shí),可以使用成員函數(shù)is_open()對(duì)文件進(jìn)行是否已打開(kāi)的驗(yàn)證。

2.關(guān)閉文件
  • 函數(shù)close()
    對(duì)文件進(jìn)行完讀寫(xiě)操作之后,必須將文件關(guān)閉使得文件重新變成可以訪問(wèn)的。close()函數(shù)負(fù)責(zé)將緩存中的數(shù)據(jù)排放出來(lái)并關(guān)閉文件。關(guān)閉的只是流對(duì)象所打開(kāi)的文件,仍然可以利用流對(duì)象去打開(kāi)別的文件。
3.文本文件的讀寫(xiě)

文本文件的讀寫(xiě)可以如同類(lèi)與控制臺(tái)交互一樣利用"<<”和">>"分別進(jìn)行寫(xiě)和讀,如:

#includeint main()
{
    ofstream file("out.txt");
    if(file.is_open())
    {
        file<<"This is a test"<

#include#includeusing namespace std;
int main()
{
  char buff[256];
  ifstream infile("in.txt");
  if(!infile.is_open())
      cout<<"Error open"<

狀態(tài)標(biāo)志符的驗(yàn)證

有一些驗(yàn)證流的狀態(tài)的成員函數(shù)(所有都返回bool型返回值):

  • bad()
    如果在讀寫(xiě)過(guò)程中出錯(cuò),返回true.
  • fail()
    除了與bad()同樣的情況下返回true外,加上格式錯(cuò)誤時(shí)也返回true,例如當(dāng)想要讀入一個(gè)整數(shù) ,而得到一個(gè)字母。
  • eof()
    如果讀文件到達(dá)文件的末尾,返回true。
  • good()
    最通用的驗(yàn)證:如果遇上以上任何一個(gè)函數(shù)返回true的話,此函數(shù)返回false。
  • clear()
    重置以上成員函數(shù)所檢查的狀態(tài)標(biāo)志,沒(méi)有參數(shù)。

獲得和設(shè)置流指針

所有輸入/輸出流對(duì)象都有至少一個(gè)流指針:

  • ifstream,類(lèi)似istream,有一個(gè)被稱為get pointer的指針,指向下一個(gè)將被讀取的元素。
  • ofsream,類(lèi)似ostream,有一個(gè)被稱為put pointer的指針,指向下一個(gè)元素的位置。
  • fstream,類(lèi)似iostream,同時(shí)繼承了 get 和 put 。

可以使用以下成員函數(shù)來(lái)讀取或配置流指針:

  • tellg()和tellp()
    這兩個(gè)函數(shù)不用傳入?yún)?shù),返回pos_type類(lèi)型的值,即一個(gè)整數(shù),代表當(dāng)前get流指針的位置(用tellg)或put流指針的位置(用tellp)。
  • seekg()和seekp()
    這對(duì)函數(shù)分別用來(lái)改變指針get和put的位置。兩個(gè)函數(shù)都被重載為兩種不同的原型:

seekg(pos_type position);
seekp(pos_type position);

使用這個(gè)原型,流指針被改變?yōu)橹赶驈奈募_(kāi)始計(jì)算的一個(gè)絕對(duì)位置。要求傳入的參數(shù)類(lèi)型與函數(shù) tellg 和tellp 的返回值類(lèi)型相同。

seekg ( off_type offset, seekdir direction );
seekp ( off_type offset, seekdir direction );

使用這個(gè)原型可以指定由參數(shù)direction決定的一個(gè)具體的指針開(kāi)始計(jì)算的一個(gè)位移(offset)。它可以是:

ios::beg從流開(kāi)始位置計(jì)算的位移
ios::cur從流指針當(dāng)前位置開(kāi)始計(jì)算的位移
ios::end從流末尾處開(kāi)始計(jì)算的位移

流指針 get 和 put 的值對(duì)文本文件(text file)和二進(jìn)制文件(binary file)的計(jì)算方法都是不同的,因?yàn)槲谋灸J降奈募心承┨厥庾址赡鼙恍薷摹S捎谶@個(gè)原因,建議對(duì)以文本文件模式打開(kāi)的文件總是使用seekg 和 seekp的第一種原型,而且不要對(duì)tellg 或 tellp 的返回值進(jìn)行修改。對(duì)二進(jìn)制文件,你可以任意使用這些函數(shù),應(yīng)該不會(huì)有任何意外的行為產(chǎn)生。

// obtaining file size
    #include#includeconst char * filename = "test.txt";
    
    int main () {
        long l,m;
        ifstream in(filename, ios::in|ios::binary);
        l = in.tellg();
        in.seekg (0, ios::end);
        m = in.tellg();
        in.close();
        cout<< "size of "<< filename;
        cout<< " is "<< (m-l)<< " bytes.\n";
        return 0;
    }                     //`獲取二進(jìn)制文件的大小
4.二進(jìn)制文件

在二進(jìn)制文件中,使用<< 和>>,以及函數(shù)(如getline)來(lái)操作符輸入和輸出數(shù)據(jù),沒(méi)有什么實(shí)際意義,雖然它們是符合語(yǔ)法的。

文件流包括兩個(gè)為順序讀寫(xiě)數(shù)據(jù)特殊設(shè)計(jì)的成員函數(shù):write 和 read。第一個(gè)函數(shù) (write) 是ostream 的一個(gè)成員函數(shù),都是被ofstream所繼承。而read 是istream 的一個(gè)成員函數(shù),被ifstream 所繼承。類(lèi) fstream 的對(duì)象同時(shí)擁有這兩個(gè)函數(shù)。它們的原型是:

write ( char * buffer, streamsize size );
read ( char * buffer, streamsize size );

這里 buffer 是一塊內(nèi)存的地址,用來(lái)存儲(chǔ)或讀出數(shù)據(jù)。參數(shù)size 是一個(gè)整數(shù)值,表示要從緩存(buffer)中讀出或?qū)懭氲淖址麛?shù)。

// reading binary file
    #include#includeconst char * filename = "test.txt";
    
    int main () {
        char * buffer;
        long size;
        ifstream in (filename, ios::in|ios::binary|ios::ate);
        size = in.tellg();
        in.seekg (0, ios::beg);
        buffer = new char [size];
        in.read (buffer, size);
        in.close();
        
        cout<< "the complete file is in a buffer";
        
        delete[] buffer;
        return 0;
    }
    //運(yùn)行結(jié)果:
    The complete file is in a buffer

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

新聞標(biāo)題:C++中fstream-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)網(wǎng)址:http://www.muchs.cn/article16/dhjddg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、軟件開(kāi)發(fā)、Google域名注冊(cè)、網(wǎng)站建設(shè)、網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)