計算機概論:C/C++程式設計

 

第7 檔案輸入/輸出

 

 


授課教師:陳慶瀚

WWW : http://www.miat.ee.isu.edu.tw/cpp

E-mail : pierre@isu.edu.tw   

 


7.2 開啟和關閉一個檔案 

C++程式中,當要打開一個串流(stream)形式的檔案, 我們可以有三種選擇模式:輸入, 輸出, 和輸入/輸出。要建立一個輸入串流(input stream)的檔案─也就是要將資料從檔案讀入,必須宣告一個資料型別為ifstream的輸入串流(input stream)的變數。例如

    ifstream in;

in是輸入串流檔案的變數名稱。

同樣的,如果要建立一個輸出串流(output stream)的檔案─也就是要將資料寫入檔案,必須宣告一個資料型別為ofstream輸入串流(output stream)的變數。例如

    ofstream out;

如果要建立一個可以輸入也可以輸出的串流檔案,就要使用fstream來宣告檔案物件:  

fstream io;   // 輸入和輸出 

一旦建立一個串流檔案物件,我們可以使用他的專屬函式open()(又稱為成員函式)來開啟檔案, 這個函式再<fstream.h>中的原型宣告如下:  

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

void ofstream::open(const char *filename, ios::openmode mode = ios::out | ios::trunc);

void fstream::open(const char *filename, ios::openmode mode = ios::in | ios::out);  

使用open()需傳入兩個參數。其中, filename是檔案名稱,filename可以包含一個檔案的路徑。openmode參數用來指定檔案是以什麼方式被開啟的。所有的開啟模式如下:  

ios::app

ios::ate

ios::binary

ios::in

ios::out

ios::trunc  

ios::app是附加模式,使用這個模式開啟檔案,會將檔案的指標指到檔案的尾端,因此程式寫入的第一筆資料會從原本檔案最會一筆資料之後開始添加,而不能任意地存取前面的資料內容。

使用ios::ate 開啟檔案被時,該檔案的指標會指到檔案的尾端,雖然ios::ate一開始便指到檔案的尾端,但在這檔案物件宣告的有效範圍內,輸入/輸出操作仍然能夠發生在檔案任何位置。  

ios::in模式宣告這個檔案能夠寫入資料,而ios::out 則宣告這個檔案能夠讀取。  

ios::binary 模式宣告這個檔案是以二進位模式進行存取。如果一個檔案沒有宣告成ios::binary 模式,整個檔案的存取都是以文字模式進行。 在文字模式裡,資料會自動從事字元轉換,例如'\n'字元經過字元轉換會自動解譯成換行指令,因此該字元資料就不會備變數讀取。然而, 當一個檔案在二進位模式中被開啟時,就不會有字元轉換的情形發生,因此上述換行字元'\n'就會直接以二進位資料被讀取或寫入。

ios::trunc模式宣告這個檔案是允許改寫(或覆蓋)一個已經存在檔案的內容。  

下面程式碼指示打開一個輸出檔案:  

ofstream out;

out.open("data.txt", ios::out);  

事實上每個檔案物件都有預設的開啟模式,也就是說,如果我們不指定開啟模式時,該檔案物件會自動以預設模式來開啟。對ifstream而言, 模式預設是ios::in; ofstream則使用ios::out | ios::trunc; 至於fstream,則是ios::in | ios::out。所以上面的程式碼範例可以寫成:

ofstream out;

out.open("data.txt");  

如果我們想讓程式更精簡,可以在宣告檔案物件時就直接開啟,如

ofstream out("data.txt"); 

如果檔案開啟失敗,則函式open( )會傳回0,否則就傳回1。所以我們可以利用這個資訊來檢查檔案是否成功的開啟,範例程式7-1展示一個實例。  

/*----------------------------------------------------*/

//                  範例程式7-1

//               檢查檔案是否成功的開啟

//                  陳慶瀚,2001

/*----------------------------------------------------*/

#include <fstream.h>

void main()

{

      ifstream in("data.txt"); 

if(!in)   //檔案開啟失敗,in==0

{

             cout << "檔案開啟錯誤!";

}   

}

假設你的硬碟中並沒有data.txt這個檔案,所以程式開啟錯誤,in0。如果我們事先建立了data.txt這個檔案(不管裡面的有無內容),那麼一旦重新執行這個程式,就不會顯示"檔案開啟錯誤!"的訊息了。

所有的檔案物件,包含ifstream, ofstream, fstream,都使用相同的函式close( )來關閉檔案,使用這個函式時不需指定任何模式。只要單純呼叫close( )就可以了: 

     in.close();  

close( ) 函數不需要傳入參數而且返回時也沒有傳回值。

 

/*----------------------------------------------------*/

//                  範例程式7-2

//                 檔案的開啟和關閉

//                  陳慶瀚,2001

/*----------------------------------------------------*/

#include <fstream.h>

void main()

{

      ifstream in("data.txt"); 

if(!in)   //檔案開啟失敗,in==0

{

             cout << "檔案開啟錯誤!";

}   

else

{

   in.close();

             cout << "檔案成功開啟和關閉!";

}

}

 


 

計算機概論:C/C++程式設計

義守大學電機系 陳慶瀚 
2001.12.26

 

謝孟媛 dvd -
情趣用品 -
飛鳥遊戲 -
遊戲基地 -
PATEK PHILIPPE -
xyz資訊工作坊 -
xyz軟體王 -
英文老師 -
沛納海 -
xyz軟體下載倉庫 -
基測試題 -
CARTIER 卡地亞 -
林晟數學 -
PIAGET -
費洛蒙情定 -
xyz -
軟體大補帖 -
高國華補習班 -
game淘 -
ps2台片 -
wii超級瑪莉攻略 -
情定費洛蒙 -
wii價格2011 -
xbox 360台片 -
tvgame360 -
愛馬仕 -
春藥專賣店 -
ps3價錢 2011 -
ps2遊戲王 -
wii遊戲片專賣店 -
百達翡麗 PATEK PHILIPPE -
壯陽藥品哪買 -
海賊王 -
春藥王 -
xyz軟體下載倉庫 -
壯陽食物 -
xbox360 -
催情藥 -
TISSOT 天梭 -
ps2遊戲燒錄 -
威而剛哪裡買 -
一夜情婦 -
xbox 360台片專賣 -
國中基測題庫 -
無雙遊戲網 -
xyz軟體王 -
ps2遊戲片80元 -
基測 -
xyz軟體王下載 -
GUCCI 古馳 -
南一題庫網 -
COACH -
LOUIS VUITTON -
wii超級瑪莉 -
wii價格2011 -
魔法老師 -
催情藥專賣店 -
國小翰林題庫網 -
wii遊戲片專賣店 -
遊戲天堂 -
寶格麗 -
金榜之路 -
wii遊戲片80元 -
xbox 360遊戲片 -
wii遊戲載點 -
人類費洛蒙情定 -
xbox 360台片專賣 -
催情王 -
xyz軟體之家 -
ps2遊戲片80元 -
情色小站 -
微風廣場 -
情慾之夜 -
民視文化 -
xbox360 -
蔻馳 -
ps2遊戲燒錄 -
ps3遊戲片 -
龍騰高中題庫 -
ps3台片 -
威而剛 -
ps3價錢 2011 -
軟體王下載 -
蕭邦 CHOPARD -
龍騰 -
催情藥 -
威而剛哪裡買 -
基測題目 -
HERMES 愛馬仕 -
情定費洛蒙 -
ps2台片 -
ps3遊戲片 -
wii瑪莉兄弟遊戲 -
江詩丹頓 Vacheron Constantin -
wii超級瑪莉 -
wii遊戲片在ho99小舖 -
春藥王 -
歷屆基測試題 -
窮人軟體 -
威而柔哪裡買 -
蕭邦 -
翰林題庫網 -
一夜情婦 -
wii遊戲下載 -
xbox 360遊戲 -
壯陽食物 -
ps2遊戲片 -
sogo百貨 -
台灣情色網 -
xyz軟體王下載 -
lv2011官方網 -
wii遊戲片專賣店 -
xbox 360價錢 -
歐米茄 -
雷達錶 RADO -
xyz資訊工坊 -
儒林補習班 -
壯陽藥品 -
xyz軟體王 -
窮人遊戲 -
ps2遊戲下載 -
ps3台片 -
德周 -
sogo百貨 -
費洛蒙情定 -
壯陽藥品哪買 -
催情王 -
春藥哪裡買 -
lv2011夏季新款 -
情趣用品 -
中友百貨 -
史萊姆的第一個家 -
情色論壇 -
萬寶龍 MONT BLANC -
萬國 -
ps2遊戲下載 -
春藥哪裡買 -
xyz資訊工作坊 -
龍騰文化 -
太平洋百貨 -
軟體王 -
xbox 360台片專賣 -
ps3遊戲片在ho99小舖 -
壯陽藥 -
xyz軟體銀行 -
xbox360台片 -
魔法24 -
wii遊戲片80元 -
XYZ資訊工坊 -
CARTIER -
春藥網 -
壯陽 -
xyz 軟體補給站 -
微風廣場 -
lv2011新款型錄 -
xbox 360遊戲 -
費洛蒙 -
卡地亞 -
wii遊戲下載 -
窮人天碟 -
春藥專賣店 -
gucci2011專賣店旗艦店 -
迪奧 -
CHANEL -
xyz軟體大本營 -
xbox 360遊戲片在ho99小舖 -
台北郵購網 -
BURBERRY 巴寶莉 -
伯爵 -
遠東百貨 -
陳希 -
費洛蒙mx -
時間廣場 -
漢神百貨 -
情色論壇 -
傳政 -
軟體 -
寶格麗 BVLGARI -
名牌包俱樂部 -
時間廣場 -
威而柔 -
wii瑪莉兄弟遊戲 -
lv名牌包專賣店 -
xyz軟體大本營 -
威而柔哪裡買 -
伯爵 PIAGET -
xyz軟體銀行 -
ps3遊戲下載 -
wii超級瑪莉歐 -
無名套裝 -
xyz軟體下載倉庫 -
江詩丹頓 -
林晟 -
ps3遊戲片在ho99小舖 -
威而剛 -
費洛蒙mx -
xyz軟體之家 -
HERMES -
林晟超理解數學 -
謝孟媛 -