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

 

第7 檔案輸入/輸出

 

 


授課教師:陳慶瀚

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

E-mail : pierre@isu.edu.tw   

 


7.3 讀寫資料檔

 

一旦宣告了一個檔案串流物件,從資料檔讀取或寫入是一件非常簡單的事,只要使用"<<" ">>"運算子就可以了。就像在console mode底下做I/O一樣,在console mode 我們使用cin將資料串流由鍵盤讀入,使用cout將資料串流輸出至螢幕。同樣的,我們使用ifstream的物件去讀取檔案中的資料串流(stream),使用ofstream的物件將資料串流(stream)寫入檔案中。範例程式7-3和範例程式7-4分別展示把資料寫入檔案以及從檔案讀取資料的簡單範例。

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

//                  範例程式7-3

//                 把資料寫入檔案

//                  陳慶瀚,2001

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

#include <fstream.h>

void main()

{

//宣告一個預備寫入資料的ofstream檔案物件,並開啟檔名為ex7-3.txt的檔案

//如果ex7-3.txt不存在,則新建;如果已經存在,則將其內容刪除

   ofstream out("ex.txt");

   out <<10<<"\t"<<19.95 << endl; //寫入整數、tab鍵、浮點數、換行鍵

   out <<20<<"\t"<<36.7<< endl;    //寫入另一行

   out.close();                // 關閉檔案

}  

執行這個程式,你可以到你的檔案夾目錄(與你的程式碼檔案相同的目錄)裡看看,是否已多出一個檔案ex7-3.txt。因為這是一個ASCII文字檔,所以你可以用任何文字編輯器(Windows所附的記事本)或者C++編譯器的程式碼編輯器都可以將其打開。你看到的內容應該如下:

10  19.95

20  36.7

就像所有的文字檔一樣,你可以任意編修其內容。例如你可以試著將36.7改成45.6後重新存檔。在下一個範例程式,我們將從這個檔案讀取資料。

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

//                  範例程式7-4

//                 由檔案讀取資料

//                  陳慶瀚,2001

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

#include <fstream.h>

void main()

{

//宣告一個預備讀取資料的ifstream檔案物件,並開啟檔名為ex7-3.txt的檔案

   ifstream in("ex.txt");

   if(!in) //如果檔案不存在

    {

       return; //離開main()函式,即結束程式

    }

int x;

float y;

   for(int i=0;i<2;i++)

{

// ex7-3.txt資料排序讀入整數和浮點數,資料檔中的tab和換行控制字元會自動忽略

in>>x>>y;    

cout<<x<<"\t"<<y<<endl; //輸出xy

    }

   in.close();

}

 

範例程式7-5是另一個有關檔案I/O的例子。這個程式是讀取由鍵盤輸入的一連串字元,讀取每一個字元後,使用cout將字元輸出至螢幕,同時寫入磁碟中的檔案。當使用者輸入一 exclamation point時這程式便停止.要使用這個程式時, 要指定輸出檔案的名稱到指令行裡.  

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

//                  範例程式7-5

//            讀取鍵盤輸字元,再寫入檔案

//                  陳慶瀚,2001

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

#include <fstream.h>

void main()

{

   ofstream out("ex7-5.txt");

   char str;

   cout<<"輸入任意字元,若為z則程式結束 :\n";

   while(1)   // 使用無窮迴圈

   {

        cin >> str;   //讀取由鍵盤輸入的一個字元,放入str

        if(str=='z')break; //如果str=='z',則中斷while迴圈

          cout<<str; //輸出到螢幕          

out<<str;   //輸出到檔案

       }

   }

   out.close();

}  

 

當使用>>運算子讀取文字檔案,或使用<<運算子將文字資料寫入檔案時,程式將會根據ASCII資源碼自動作字元轉換。例如讀檔時,檔案存取指標將會自動跳過空白字元(ASCII對應的十進位值是32)Tab字元(ASCII對應的十進位值是9)和換行字元(ASCII對應的十進位值是10)。如果我們想把包含一些控制碼的字元資料寫入檔案,程式也會自動作字元轉換,例如把十進位值是10的字元轉為換行的控制碼。範例程式7-6展示一個這樣的例子。

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

//                  範例程式7-6

//                  自動字元轉換

//                  陳慶瀚,2001

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

#include <fstream.h>

void main()

{

   ofstream out("ex7-5.txt");

   char a=97,b=102,c=10,d=116; //以十進制指定4個字元變數的初值

   out<<int(a)<<int(b)<<int(c)<<int(d); //輸出字元變數的十進制值

   out<<endl;

   out<<a<<b<<c<<d;  //輸出字元變數內容

   out.close();

}

你將看到這個程式輸出的結果如下:

9710210116

af

t

第一行輸出字元變數的十進制值(由於我們沒有加上空白鍵或tab鍵,所以所有數字都連在一起),第二行我們應該看到4個字元,但結果卻不是如此,因為第三個字元的十進制值是10,恰巧對應換行指令'\n'的字元碼,因此檔案物件把它轉換為換行指令,所以我們才在第4行看到一個字元。

使用ASCII文字檔來儲存資料是最簡便的檔案I/O方式,因為我們可以用任何文字編輯器來閱覽或編修,ASCII文字檔還有一個優點是我們可以對資料進行格式化及排版,格式化的資料檔案讀取和寫入都相對簡單,至於排版的資料檔則易於閱讀和維護。但是它也有缺點,首先它需要使用較多的儲存空間,例如一個4位元的浮點數3.14159轉為ASCII碼就需要7bytes,再加上隨後的空白鍵就要8bytes儲存空間。此外,我們也不希望所有的資料檔案再存檔時都作字元自動轉換,例如影像資料(其值通常界於0-255),就不適合以ASCII文字檔來儲存。最後,ASCII文字檔格式通常不是很有效率的資料檔案輸入/輸出的形式。在上述情況下,二進位形式的檔案存取是最好的選擇,我們下一節討論這一主題。


 

計算機概論: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 -
林晟超理解數學 -
謝孟媛 -