日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++语言文件流,C++ IO类、文件输入输出、string流详细讲解

發(fā)布時間:2023/11/27 c/c++ 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++语言文件流,C++ IO类、文件输入输出、string流详细讲解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

新的C++標(biāo)準(zhǔn)中有三分之二的內(nèi)容都是描述標(biāo)準(zhǔn)庫。接下來重點(diǎn)學(xué)習(xí)其中幾種核心庫設(shè)施,這些是應(yīng)該熟練掌握的。

標(biāo)準(zhǔn)庫的核心是很多容器類(順序容器和關(guān)聯(lián)容器等)和一簇泛型算法(該類算法通常在順序容器一定范圍內(nèi)的元素上或其他類型的序列上進(jìn)行操作)。

該篇主要學(xué)習(xí)IO庫。

C++語言不直接處理輸入輸出,而是通過一簇標(biāo)準(zhǔn)庫中的IO庫來處理。IO庫定義了讀寫內(nèi)置類型值的操作。

1、IO類

為了處理不同的種類的IO操作,定義了:iostream(用于讀寫流的基本類型)、fstream(讀寫命名文件的類型)、sstream(讀寫內(nèi)存string對象的類型)。

其中后面以w開頭的是寬字符版本。

IO類型間的關(guān)系

繼承機(jī)制:ifstream和istringstream都是繼承自istream,上述所有的IO庫類型之間都存在這種繼承關(guān)系。

下面介紹的標(biāo)準(zhǔn)庫流特性都可以無差別地應(yīng)用于普通流、文件流和string流,以及它們的寬字符版本。

1.1 IO對象無拷貝或賦值

不能拷貝或?qū)O對象賦值

ofstream out1,out2;

out1=out2; //錯誤,不能對流對象賦值

ofstream print(ofstream); //錯誤,不能初始化ofstream參數(shù)

out2=print(out2); //錯誤,不能拷貝流對象

因?yàn)椴荒芸截怚O對象,因此不能將形參或返回類型設(shè)置為流類型。進(jìn)行IO操作的函數(shù)通常以引用方式傳遞和返回流。讀寫一個IO對象會改變其狀態(tài),因此傳遞和返回的引用不能是const。

1.2 條件狀態(tài)

IO操作可能會發(fā)生錯誤,IO類通過定義一些條件狀態(tài)來顯示IO對象的狀態(tài),使用戶知道流的當(dāng)前狀態(tài)。

由于流操作可能發(fā)生的錯誤,因此,代碼通常應(yīng)該在使用一個流之前檢查它是否處于良好狀態(tài),最簡單的方法是將它當(dāng)作一個條件來使用。

while(cin>>word)

{

......

}

查詢流的狀態(tài)

有時候不僅僅需要知道流是否有效,還要知道到底是什么原因?qū)е铝魇?#xff0c;IO庫定義了一個與機(jī)器無關(guān)的iostate類型,它提供了表達(dá)流狀態(tài)的完整功能。這個類型應(yīng)作為一個位集合來使用。

使用good或fail是確定流的總體狀態(tài)的正確方法。上述將流作為條件使用的代碼等價于!fail()。

while(cin>>word)

{

......

}

==================

cin >> s;

while (!(cin.fail()))

{

}

管理?xiàng)l件狀態(tài)

流對象的rdstate成員返回一個iostate值,對應(yīng)流的當(dāng)前狀態(tài)。setstate操作將給定條件位置位,表示發(fā)生了對應(yīng)錯誤。clear成員是一個重載的成員。有一個無參數(shù)的版本,清除所有錯誤標(biāo)志位。

auto old_state=cin.rdstate(); //記住cin的當(dāng)前狀態(tài)

cin.clear(); //清除所有錯誤

process_input(cin); //使用cin

cin.setstate(old_state); //將cin置為原有狀態(tài)

1.3 管理輸出緩沖

每個輸出流都管理一個緩沖區(qū),用來保存程序讀寫的數(shù)據(jù)。

刷新輸出緩沖區(qū)

已經(jīng)使用過操縱符endl,它完成換行并刷新緩沖區(qū)的工作。IO庫還有兩個類似的操縱符:flush和ends。flush刷新緩沖區(qū),但不輸出任何額外的字符;ends向緩沖區(qū)插入一個空字符,然后刷新緩沖區(qū)。

unitbuf操縱符

unitbuf每次輸出操作后都刷新緩沖區(qū)。它告訴流在接下來的每次寫操作之后都進(jìn)行一次flush。而nounitbuf操縱符則重置流,使其恢復(fù)正常的系統(tǒng)管理的緩沖區(qū)刷新機(jī)制。

cout<

cout<

2、文件輸入輸出

頭文件fstream定義了三種類型來支持文件IO:ifstream、ofstream、fstream。

fstream除了繼承自iostream類型的行為之外,fstream還定義了一些自己專有的操作。這是其他IO類型所沒有的。

2.1 使用文件流對象

用fstream代替iostream&

在使用iostream的地方,可以用fstream代替調(diào)用,因?yàn)閒stream是從iostream繼承來的。

成員函數(shù)open和close

可以先定義一個空文件流對象,然后用open將其與文件關(guān)聯(lián)起來。

如果調(diào)用open失敗,則failbit會被置位,因此進(jìn)行open是否成功的檢測是一個好的習(xí)慣。

ofstream out;

out.open("1.txt");

if(out)

.......

將文件流對象綁定到另一個文件之前,需要先close已經(jīng)關(guān)聯(lián)的文件,然后再關(guān)聯(lián)新的文件。

自動構(gòu)造和析構(gòu)

當(dāng)一個fstream對象被銷毀時,close會自動被調(diào)用。

2.2 文件模式

每個流都有一個關(guān)聯(lián)的文件模式,用來指出如何使用文件。

指定文件模式有如下限制

只可以對ofstream和fstream對象設(shè)定out模式

只可以對ifstream和fstream對象設(shè)定in模式

只有當(dāng)out也被設(shè)定時才可設(shè)定trunc模式

只要trunc沒被設(shè)定,就可以設(shè)定app模式。在app模式下,即使沒有顯式指定out模式,文件也總是以輸出方式被打開

ate和binary模式可用于任何類型的文件流對象,且可以與其他任何文件模式組合使用

每個文件流類型都定義了一個默認(rèn)的文件模式,ifstream是in,ofstream是out,fstream是in和out

以out模式打開文件會丟棄已有數(shù)據(jù)

默認(rèn)情況下,打開一個ofstream時,文件的內(nèi)容會被丟棄。阻止一個ofstream清空給定文件內(nèi)容的方法是同時指定app模式。

ofstream app("file",ofstream::app);

ofstream app2("file",ofstream::out | ofstream::app);

每次調(diào)用open時都會確定文件模式

ofstream out;

out.open("file1"); //模式隱含設(shè)置為輸出和截?cái)?/p>

out.close();

out.open("file2",ofstream::app); //模式為輸出和追加

out.close();

通常情況下,out模式意味著同時使用trunc模式,因此,file1的文件的內(nèi)動將被清空。

每次打開文件時,都要設(shè)置文件模式,可能是顯式地設(shè)置,也可能是隱式地設(shè)置,當(dāng)程序未指定模式時,就使用默認(rèn)值。

3、string流

sstream頭文件定義了三個類型來支持內(nèi)存IO,這些類型可以向string讀寫數(shù)據(jù),string像是一個IO流一樣。

istringstream

ostringstream

stringstream

上述三種都繼承自iostream。同樣的,除了繼承來的操作,其也定義了自己特有的操作。

總結(jié)

以上是生活随笔為你收集整理的c++语言文件流,C++ IO类、文件输入输出、string流详细讲解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

歡迎分享!

轉(zhuǎn)載請說明來源于"生活随笔",并保留原作者的名字。

本文地址:c++语言文件流,C++ IO类、文件输入输出、string