我在這裡比較下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 運算子比較引用型別直接比較的引用位址是否相...