C與C++簡單檔案操作比較
阿新 • • 發佈:2019-01-05
為了更加深刻地理解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++也是類似的)這樣一看,是不是有點“反”著來的感覺?