c和c 檔案操作比較

2021-06-01 02:59:27 字數 2873 閱讀 1080

我在這裡比較下c語言和c++的檔案操作。

首先是幾個基礎問題。

typedef basic_ifstream> ifstream;

typedef basic_ofstream> ofstream;

typedef basic_fstream> fstream;

查了下stlport,stlport\stl\_iosfwd.h,發現fstream不過是個typedef。

char_traits是字元特性模板

,目的是提供最基本的字元特性的統一的方法函式。

char_traits

繼承了__char_traits_base。

下面看**,只列出了ascii的。

// char字元型別模板偏特化

__stl_template_null class char_traits: public __char_traits_base

//char到int型別的轉換

static int_type to_int_type(const char_type& __c)

//比較兩個字串

static int compare(const char* __s1, const char* __s2, size_t __n)

//到字元的長度

static size_t length(const char* __s)

//字元賦值

static void assign(char& __c1, const char& __c2)

//字串賦值

static char* assign(char* __s, size_t __n, char __c)

};

在流的實現上,採取了緩衝區i/o的方式,每個stream物件中都有乙個對於乙個streambuf,對於流的操作預設狀態下是對於緩衝區的操作,直到出現迫使他和緩衝區同步的操作。read()使用了同步緩衝區,read()讀取的時候,如果發現緩衝區中的資料不夠,就試圖從關聯的資料來源(這裡就是檔案)來讀取。

fopen(開啟檔案)

相關函式 open,fclose 

表頭檔案 #include

定義函式 file * fopen(const char * path,const char * mode); 

函式說明 引數path字串包含欲開啟的檔案路徑及檔名,引數mode字串則代表著流形態。

mode有下列幾種形態字串:

r 開啟唯讀檔案,該檔案必須存在。

r+ 開啟可讀寫的檔案,該檔案必須存在。

w 開啟只寫檔案,若檔案存在則檔案長度清為0,即該檔案內容會消失。若檔案不存在則建立該檔案。

w+ 開啟可讀寫檔案,若檔案存在則檔案長度清為零,即該檔案內容會消失。若檔案不存在則建立該檔案。

a 以附加的方式開啟只寫檔案。若檔案不存在,則會建立該檔案,如果檔案存在,寫入的資料會被加到檔案尾,即檔案原先的內容會被保留。

a+ 以附加方式開啟可讀寫的檔案。若檔案不存在,則會建立該檔案,如果檔案存在,寫入的資料會被加到檔案尾後,即檔案原先的內容會被保留。

上述的形態字串都可以再加乙個b字元,如rb、w+b或ab+等組合,加入b 字元用來告訴函式庫開啟的檔案為二進位制檔案,而非純文字檔案。不過在posix系統,包含linux都會忽略該字元。由fopen()所建立的新檔案會具有s_irusr|s_iwusr|s_irgrp|s_iwgrp|s_iroth|s_iwoth(0666)許可權,此檔案許可權也會參考umask值。 

返回值 檔案順利開啟後,指向該流的檔案指標就會被返回。若果檔案開啟失敗則返回null,並把錯誤**存在errno 中。 

附加說明 一般而言,開檔案後會作一些檔案讀取或寫入的動作,若開檔案失敗,接下來的讀寫動作也無法順利進行,所以在fopen()後請作錯誤判斷及處理。 

範例#include

main()

feof(檢查檔案流是否讀到了檔案尾)

相關函式 fopen,fgetc,fgets,fread 

表頭檔案 #include

定義函式 int feof(file * stream); 

函式說明 feof()用來偵測是否讀取到了檔案尾,尾數stream為fopen()所返回之檔案指標。如果已到檔案尾則返回非零值,其他情況返回0。 

返回值 返回非零值代表已到達檔案尾。

fgetc(由檔案中讀取乙個字元)

相關函式 open,fread,fscanf,getc 

表頭檔案 include

定義函式 nt fgetc(file * stream); 

函式說明 fgetc()從引數stream所指的檔案中讀取乙個字元。若讀到檔案尾而無資料時便返回eof。 

返回值 getc()會返回讀取到的字元,若返回eof則表示到了檔案尾。 

範例#include

main()

fgets(由檔案中讀取一字串)

相關函式 open,fread,fscanf,getc 

表頭檔案 include

定義函式 har * fgets(char * s,int size,file * stream); 

函式說明 fgets()用來從引數stream所指的檔案內讀入字元並存到引數s所指的記憶體空間,直到出現換行字元、讀到檔案尾或是已讀了size-1個字元為止,最後會加上null作為字串結束。 

返回值 gets()若成功則返回s指標,返回null則表示有錯誤發生。 

範例 #include

main()

執行 this is a test /*輸入*/

this is a test /*輸出*/

c c 檔案操作比較

cc 讀寫字串 fgets 字元陣列名,n,檔案指標 其中的n是乙個正整數。表示從檔案中讀出的字串不超過 n 1個字元。fputs 字串,檔案指標 ifstream ofstream 格式化讀寫函式 fscanf 檔案指標,格式字串,輸入表列 fprintf 檔案指標,格式字串,輸出表列 istri...

日期時間的操作比較

1.日期時間間隔操作 當前時間減去7分鐘的時間 select sysdate,sysdate interval 7 minute from dual 當前時間減去7小時的時間 select sysdate interval 7 hour from dual 當前時間減去7天的時間 select sy...

C 使用「 」與「equals」作比較的區別?

1 equals比較兩個物件時必須保證兩個物件的型別一致比較其值相同返回true不相同返回false 2 equals比較兩個物件的型別不一致,不用考慮值是否一樣都返回false 3 運算子比較值型別直接是對於其值進行比較相同為true不同為false 4 運算子比較引用型別直接比較的引用位址是否相...