C++ 文件操作

C++ 文件和流

到目前為止耗式,我們已經(jīng)使用了 iostream 標(biāo)準(zhǔn)庫(kù)前痘,它提供了 cincout 方法分別用于從標(biāo)準(zhǔn)輸入讀取流和向標(biāo)準(zhǔn)輸出寫(xiě)入流港粱。
介紹如何從文件讀取流和向文件寫(xiě)入流。這就需要用到 C++ 中另一個(gè)標(biāo)準(zhǔn)庫(kù) fstream措左,它定義了三個(gè)新的數(shù)據(jù)類(lèi)型:

數(shù)據(jù)類(lèi)型 描述
ofstream 該數(shù)據(jù)類(lèi)型表示輸出文件流腌歉,用于創(chuàng)建文件并向文件寫(xiě)入信息蛙酪。
ifstream 該數(shù)據(jù)類(lèi)型表示輸入文件流,用于從文件讀取信息翘盖。
fstream 該數(shù)據(jù)類(lèi)型通常表示文件流桂塞,且同時(shí)具有 ofstream 和 ifstream 兩種功能,這意味著它可以創(chuàng)建文件馍驯,向文件寫(xiě)入信息阁危,從文件讀取信息玛痊。

要在 C++ 中進(jìn)行文件處理,必須在 C++ 源代碼文件中包含頭文件 <iostream> 和 <fstream>狂打。

打開(kāi)文件

在從文件讀取信息或者向文件寫(xiě)入信息之前擂煞,必須先打開(kāi)文件。ofstreamfstream 對(duì)象都可以用來(lái)打開(kāi)文件進(jìn)行寫(xiě)操作趴乡,如果只需要打開(kāi)文件進(jìn)行讀操作对省,則使用 ifstream 對(duì)象。
下面是 open() 函數(shù)的標(biāo)準(zhǔn)語(yǔ)法晾捏,open() 函數(shù)是 fstream蒿涎、ifstreamofstream 對(duì)象的一個(gè)成員。

void open(const char *filename, ios::openmode mode);

在這里惦辛,open() 成員函數(shù)的第一參數(shù)指定要打開(kāi)的文件的名稱和位置劳秋,第二個(gè)參數(shù)定義文件被打開(kāi)的模式。

模式標(biāo)志 描述
ios::app 追加模式胖齐。所有寫(xiě)入都追加到文件末尾玻淑。
ios::ate 文件打開(kāi)后定位到文件末尾。
ios::in 打開(kāi)文件用于讀取呀伙。
ios::out 打開(kāi)文件用于寫(xiě)入补履。
ios::trunc 如果該文件已經(jīng)存在,其內(nèi)容將在打開(kāi)文件之前被截?cái)嗲常窗盐募L(zhǎng)度設(shè)為 0干像。

您可以把以上兩種或兩種以上的模式結(jié)合使用帅腌。例如驰弄,如果您想要以寫(xiě)入模式打開(kāi)文件,并希望截?cái)辔募倏停苑牢募汛嬖谄莞荩敲茨梢允褂孟旅娴恼Z(yǔ)法:

ofstream outfile;
outfile.open("file.dat", ios::out | ios::trunc );

類(lèi)似地,您如果想要打開(kāi)一個(gè)文件用于讀寫(xiě)溺职,可以使用下面的語(yǔ)法:

fstream afile;
afile.open("file.dat", ios::out | ios::in );

關(guān)閉文件

當(dāng) C++ 程序終止時(shí)岔擂,它會(huì)自動(dòng)關(guān)閉刷新所有流,釋放所有分配的內(nèi)存浪耘,并關(guān)閉所有打開(kāi)的文件乱灵。但程序員應(yīng)該養(yǎng)成一個(gè)好習(xí)慣,在程序終止前關(guān)閉所有打開(kāi)的文件七冲。
下面是 close() 函數(shù)的標(biāo)準(zhǔn)語(yǔ)法痛倚,close() 函數(shù)是 fstreamifstreamofstream 對(duì)象的一個(gè)成員澜躺。

void close();

寫(xiě)入文件

在 C++ 編程中蝉稳,我們使用流插入運(yùn)算符( << )向文件寫(xiě)入信息抒蚜,就像使用該運(yùn)算符輸出信息到屏幕上一樣。唯一不同的是耘戚,在這里您使用的是 ofstream 或 fstream 對(duì)象嗡髓,而不是 cout 對(duì)象。

讀取文件

在 C++ 編程中收津,我們使用流提取運(yùn)算符( >> )從文件讀取信息饿这,就像使用該運(yùn)算符從鍵盤(pán)輸入信息一樣。唯一不同的是朋截,在這里您使用的是 ifstream 或 fstream 對(duì)象蛹稍,而不是 cin 對(duì)象。

讀取 & 寫(xiě)入實(shí)例

下面的 C++ 程序以讀寫(xiě)模式打開(kāi)一個(gè)文件部服。在向文件 afile.dat 寫(xiě)入用戶輸入的信息之后唆姐,程序從文件讀取信息,并將其輸出到屏幕上:


#include <fstream>
#include <iostream>
using namespace std;

int main ()
{  
   char data[100];

   // 以寫(xiě)模式打開(kāi)文件
   ofstream outfile;
   outfile.open("afile.dat");

   cout << "Writing to the file" << endl;
   cout << "Enter your name: "; 
   cin.getline(data, 100);

   // 向文件寫(xiě)入用戶輸入的數(shù)據(jù)
   outfile << data << endl;

   cout << "Enter your age: "; 
   cin >> data;
   cin.ignore();

   // 再次向文件寫(xiě)入用戶輸入的數(shù)據(jù)
   outfile << data << endl;

   // 關(guān)閉打開(kāi)的文件
   outfile.close();

   // 以讀模式打開(kāi)文件
   ifstream infile; 
   infile.open("afile.dat"); 

   cout << "Reading from the file" << endl; 
   infile >> data; 

   // 在屏幕上寫(xiě)入數(shù)據(jù)
   cout << data << endl;

   // 再次從文件讀取數(shù)據(jù)廓八,并顯示它
   infile >> data; 
   cout << data << endl; 

   // 關(guān)閉打開(kāi)的文件
   infile.close();

   return 0;
} 

當(dāng)上面的代碼被編譯和執(zhí)行時(shí)奉芦,它會(huì)產(chǎn)生下列輸入和輸出:

$./a.out
Writing to the file
Enter your name: Zara
Enter your age: 9
Reading from the file
Zara
9

上面的實(shí)例中使用了 cin 對(duì)象的附加函數(shù),比如 getline()函數(shù)從外部讀取一行剧蹂,ignore() 函數(shù)會(huì)忽略掉之前讀語(yǔ)句留下的多余字符声功。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市宠叼,隨后出現(xiàn)的幾起案子先巴,更是在濱河造成了極大的恐慌,老刑警劉巖冒冬,帶你破解...
    沈念sama閱讀 216,744評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伸蚯,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡简烤,警方通過(guò)查閱死者的電腦和手機(jī)剂邮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)横侦,“玉大人挥萌,你說(shuō)我怎么就攤上這事⊥鞑啵” “怎么了引瀑?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,105評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)榨馁。 經(jīng)常有香客問(wèn)我憨栽,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,242評(píng)論 1 292
  • 正文 為了忘掉前任徒像,我火速辦了婚禮黍特,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘锯蛀。我一直安慰自己灭衷,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評(píng)論 6 389
  • 文/花漫 我一把揭開(kāi)白布旁涤。 她就那樣靜靜地躺著翔曲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪劈愚。 梳的紋絲不亂的頭發(fā)上瞳遍,一...
    開(kāi)封第一講書(shū)人閱讀 51,215評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音菌羽,去河邊找鬼掠械。 笑死,一個(gè)胖子當(dāng)著我的面吹牛注祖,可吹牛的內(nèi)容都是我干的猾蒂。 我是一名探鬼主播,決...
    沈念sama閱讀 40,096評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼是晨,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼肚菠!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起罩缴,我...
    開(kāi)封第一講書(shū)人閱讀 38,939評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蚊逢,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后箫章,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體烙荷,經(jīng)...
    沈念sama閱讀 45,354評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評(píng)論 2 333
  • 正文 我和宋清朗相戀三年炉抒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了奢讨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片稚叹。...
    茶點(diǎn)故事閱讀 39,745評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡焰薄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出扒袖,到底是詐尸還是另有隱情塞茅,我是刑警寧澤,帶...
    沈念sama閱讀 35,448評(píng)論 5 344
  • 正文 年R本政府宣布季率,位于F島的核電站野瘦,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鞭光,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評(píng)論 3 327
  • 文/蒙蒙 一吏廉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧惰许,春花似錦席覆、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,683評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至晦毙,卻和暖如春生巡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背见妒。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,838評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工孤荣, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人须揣。 一個(gè)月前我還...
    沈念sama閱讀 47,776評(píng)論 2 369
  • 正文 我出身青樓垃环,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親返敬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子遂庄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • c++文件操作詳解 C++ 通過(guò)以下幾個(gè)類(lèi)支持文件的輸入輸出: ofstream: 寫(xiě)操作(輸出)的文件類(lèi) (由o...
    鮑陳飛閱讀 1,774評(píng)論 0 2
  • 代碼 說(shuō)明 主函數(shù)中首先定義了string類(lèi)型的文件名對(duì)象;然后創(chuàng)建了 fstream 的對(duì)象劲赠;隨后調(diào)用open函...
    qratosone閱讀 235評(píng)論 0 0
  • 說(shuō)明 假定文件流對(duì)象為 fstream fs; 讀寫(xiě)模式打開(kāi)文件時(shí)涛目,需要使用 ios::in | ios::ou...
    qratosone閱讀 378評(píng)論 0 0
  • C/C++輸入輸出流總結(jié) 前兩天寫(xiě)C++實(shí)習(xí)作業(yè),突然發(fā)現(xiàn)I/O是那么的陌生凛澎,打了好長(zhǎng)時(shí)間的文件都沒(méi)有打開(kāi)霹肝,今天終...
    LuckTime閱讀 1,731評(píng)論 0 6
  • C++ 初級(jí)C++ 1)C++和c區(qū)別: C++函數(shù)例:hello.cpp 全局變量和局部變量 作用域運(yùn)算符 : ...
    賦閑閱讀 314評(píng)論 0 0