1. 程式人生 > >C與C++簡單檔案操作比較

C與C++簡單檔案操作比較

為了更加深刻地理解C與C++對檔案操作,本文以一個簡單的檔案讀寫操作為例項(分別含C和C++源程式),來簡單分析一下C與C++在檔案操作上的區別。
首先,從標頭檔案的角度出發:對於C++,其最大的特點是引入了“類”的概念,所以對檔案的操作首先就要含有檔案流的類的函式的標頭檔案,即#include<fstream>;而C語言中無此概念,因而不需要額外的標頭檔案。
其次,從檔案的寫操作上分析:C++的操作是對物件的操作,因此首先應該建立寫檔案流的物件,即ofstream outfile,(其中ofstream是標頭檔案fstream中的一個類),對物件outfile的初始化主要包括:寫操作檔案的名稱(如,myfile.dat)和檔案操作的方式(ios::out表示寫),對物件的操作都是通過函式成員(close())實現的;在C中是通過檔案指標(FILE *fpin)和相應的庫函式(fopen、close)來實現的,其中fopen也包含寫操作檔案的名稱和檔案操作方式(“r”)這兩大引數。其中,要注意兩種語言都要對操作後的物件(或指標)進行判斷,若為空,則退出,以此來保證程式的有效執行。(若沒有此判斷,則後續關於檔案資料的操作就是一個大的BUG)。對檔案寫操作結束後來及時的關閉檔案,以釋放空間。
再次,從檔案的讀操作上分析:與寫操作類似,C++都是通過建立物件,物件呼叫成員函式實現的;而C則是通過檔案指標,對庫函式的呼叫實現的。
C++語言:
<span style="font-family: Arial, Helvetica, sans-serif;">#include<iostream></span>
#include<fstream>//含檔案流操作標頭檔案
#include<stdlib.h>
using namespace std;
int main()
{
    int a,mymax=-9999;
    ofstream outfile("myfile.dat",ios::out);//建立寫檔案物件
    if(!outfile)//判斷檔案開啟是否成功
    {
        cerr<<"open wrong!\n";
        exit(1);
    }
    for(int i=0;i<10;i++)//向檔案寫入資料
    {
        cin>>a;
        outfile<<a<<endl;
    }
    outfile.close();//關閉檔案
    ifstream infile("myfile.dat",ios::in);//建立檔案讀物件
    if(!infile)<span style="font-family: Arial, Helvetica, sans-serif;">//判斷檔案開啟是否成功</span>
    {
        cerr<<"open wrong\n";
        exit(1);
    }
    while(infile>>a)//讀取檔案的資料
    {
        if(mymax<a)//找出檔案資料中的最大者
            mymax=a;
    }
    cout<<"Max="<<mymax<<endl;//輸出最大者
    infile.close();//關閉檔案
    return 0;
}

C語言:

</pre><pre name="code" class="objc">#include<stdio.h>
#include<stdlib.h>
int main()
{
    FILE *fpin,*fpout;
    int a,i,mymax=-99999;
    fpin=fopen("myfile.dat","w");//以寫的方式開啟檔案
    if(!fpin)//判斷檔案開啟是否成功
    {
        printf("open wrong\n");
        exit(1);
    }
    for(i=0;i<10;i++)//向檔案寫入資料
    {
        scanf("%d",&a);
        fprintf(fpin,"%d\n",a);
    }
    printf("寫入完成!\n");//寫入完成提示
    fclose(fpin);//關閉檔案
    fpout=fopen("myfile.dat","r");//以讀的方式開啟檔案
    if(!fpout)//判斷檔案是否開啟成功
    {
        printf("open wrong\n");
        exit(1);
    }
    while(!feof(fpout))//判斷是否到檔案尾
    {
        fscanf(fpout,"%d",&a);//從檔案中讀取資料
        if(a>mymax)//找出檔案資料中的最大者
            mymax=a;
    }
    fclose(fpout);//關閉檔案
    printf("Max=%d\n",mymax);//輸出最大者
    return 0;
}

C、C++檔案操作的一般模板:

//必要的標頭檔案
int main()
{
    //建立物件、或指標
    //檔案開啟方式(只讀、只寫或其它)
    //判斷開啟檔案是否成功
    //進行讀寫操作
    //關閉檔案,釋放空間
    return 0;
}


小結:1)關於C++檔案讀、寫操作中應注意包含必要的標頭檔案:#include<fstream>;而C語言中不含此檔案;

2)關於C++主要通過建立檔案流物件(檔名+開啟方式),由檔案流物件呼叫相應的成員函式(close())來實現;而C中通過建立檔案指標,並呼叫相關的庫函式(close(),feof(),fscanf(),fprintf())來實現。

3)無論是C還是C++都應該注意,對檔案開啟操作後應立即判斷其指標或物件是否為空;並且在檔案操作結束後及時關閉檔案,釋放空間。

P.S:關於檔案的簡單讀寫,其實和將資料從鍵盤輸入、輸出有很多相似之處。如,從鍵盤輸入資料:在C中,scanf("%d",&a),而輸入到檔案中為:fprintf(fpout,"%d",a);

對於從標屏輸出資料:在C中,printf("%d\n",a),而從檔案讀取資料為fscanf(fpout,"%d",&a).(C++也是類似的)這樣一看,是不是有點“反”著來的感覺?