1. 程式人生 > >C++的檔案操作

C++的檔案操作

檔案操作的基本形式

1、定義檔案流物件

2、通過建構函式或者成員函式open開啟檔案(若檔案不存在則建立)

3、開啟檔案失敗時的中斷或檔案處理

4、對檔案進行各種操作

5、檔案處理結束時關閉檔案

檔案是存在於磁碟上的,流物件則位於記憶體空間,若定義輸入流物件ifstream inf;則與inf關聯的檔案預設是以讀的方式開啟的,即將資料從磁碟檔案讀入記憶體空間,讀資料使用read成員函式。若定義輸出流物件ofstream iof;則與iof關聯的檔案預設是以寫的方式開啟的,即將資料從記憶體空間寫入磁碟檔案,寫資料使用write成員函式。

/*例子:已知檔案book.dat中有100個數據銷售記錄,每個銷售記錄由程式碼、書名、單價、和數量4個組成部分組成,檔案每行包括上述四個組成成分,並且使用Tab間隔,格式如下:
1001    軟體世界    5    100
1002    計算機工程    6    120
要求將所有記錄寫入到out.dat檔案中,然後將第一行資料輸出到螢幕。*/


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

struct Book    
{
    char c[5],n[11];
    int p,q;
};//定義一個Book型別的資料結構,包含四個組成成分

int main(void)
{
    Book a;
    ifstream inf("book.dat");//檔案輸入流是讀模式,即將檔案中內容讀入記憶體中;
    ios_base::openmode m = ios_base::in|ios_base::out;
    ofstream iof("out.dat",m|ios_base::trunc|ios_base::binary);//開啟(新建一個二進位制檔案)
    if(inf.fail()||iof.fail()) return -1;
    while(!inf.eof())
    {
        inf>>a.c>>a.n>>a.p>>a.q;
        iof.write((char *)&a,sizeof(Book));
    }
    inf.close();
    iof.close();//將兩個檔案都關閉
    //iof.seekp(0*sizeof(Book),ios_base::beg);
    ifstream iinf("out.dat");//重新將out.dat檔案開啟為ifstream類物件,以便將第一行資料寫入a
    iinf.read((char *)&a,sizeof(Book));
    cout<<a.c<<endl<<a.n<<endl<<a.p<<endl<<a.q<<endl;
    iinf.close();
return 0;
}