標籤:
http://blog.sina.com.cn/s/blog_61437b3b0102v0bt.html
http://blog.csdn.net/chenwk891/article/details/8776479在C\C++中,檔案操作都是由庫函數來實現的,主要是分為讀和寫兩種操作,以下詳細講解以下所有有關檔案操作的用法:
(1)fopen()函數:開啟檔案包含標頭檔:#include格式:FILE * fopen(const char * path,const char * mode);參數:path:需要開啟的檔案路徑mode:檔案開啟檔案,具體如下r 以唯讀方式開啟檔案,該檔案必須存在。r+ 以可讀寫方式開啟檔案,該檔案必須存在。rb+ 讀寫開啟一個二進位檔案,允許讀資料。rt+ 讀寫開啟一個文字檔,允許讀和寫。w 開啟唯寫檔案,若檔案存在則檔案長度清為0,即該檔案內容會消失。若檔案不存在則建立該檔案。w+ 開啟可讀寫檔案,若檔案存在則檔案長度清為零,即該檔案內容會消失。若檔案不存在則建立該檔案。a 以附加的方式開啟唯寫檔案。若檔案不存在,則會建立該檔案,如果檔案存在,寫入的資料會被加到檔案尾,即檔案原先的內容會被保留。(EOF符保留)a+ 以附加方式開啟可讀寫的檔案。若檔案不存在,則會建立該檔案,如果檔案存在,寫入的資料會被加到檔案尾後,即檔案原先的內容會被保留。(原來的EOF符不保留)wb 唯寫開啟或建立一個二進位檔案;只允許寫資料。wb+ 讀寫開啟或建立一個二進位檔案,允許讀和寫。wt+ 讀寫開啟或著建立一個文字檔;允許讀寫。at+ 讀寫開啟一個文字檔,允許讀或在文本末追加資料。ab+ 讀寫開啟一個二進位檔案,允許讀或在檔案末追加資料。
現在對上面的檔案開啟檔案做個總結:檔案使用方式由r,w,a,t,b,+六個字元拼成,各字元的含義是: r(read): 讀 w(write): 寫 a(append): 追加 t(text):文字檔,可省略不寫 b(banary): 二進位檔案 +: 讀和寫
傳回值: 如果檔案順利開啟,返回指向該流的檔案指標。如果檔案開啟失敗則返回NULL,並把錯誤碼存在errno中。說明 一般而言,開啟檔案後會作一些檔案讀取或寫入的動作,若開啟檔案失敗,接下來的讀寫動作也無法順利進行,所以一般在fopen()後作錯誤判斷及處理。
(2)fread()函數和fwrite()函數:(可以用來實現對資料區塊的操作)1.一般調用形式 fread(buffer,size,count,fp); fwrite(buffer,size,count,fp); 2.說明 (1)buffer:是一個指標,對fread來說,它是讀入資料的存放地址。對fwrite來說,是要輸出資料的地址。 (2)size:要讀寫的位元組數; (3)count:要進行讀寫多少個size位元組的資料項目; (4)fp:檔案型指標。 C語言還提供了用於整塊資料的讀寫函數。可用來讀寫一組資料,如一個數組元素,一個結構變數的值等。讀資料區塊函數調用的一般形式為: fread(buffer,size,count,fp); 寫資料區塊函數調用的一般形式為: fwrite(buffer,size,count,fp); 其中buffer是一個指標,在fread函數中,它表示存放輸入資料的首地址。在fwrite函數中,它表示存放輸出資料的首地址。 size 表示資料區塊的位元組數。count 表示要讀寫的資料區塊塊數。fp 表示檔案指標。例如:fread(fa,4,5,fp); 其意義是從fp所指的檔案中,每次讀4個位元組(一個實數)送入實數組fa中,連續讀5次,即讀5個實數到fa中。
(3)fgetc()和fputc():字元讀寫函數fgetc函數(getc函數) (1)一般調用形式 ch=fgetc(fp);(2)作用 從指定的檔案讀入一個字元,即從fp所指向的檔案中讀入一個字元賦給ch。(3)傳回值 成功:傳回值所得到的字元; 失敗:返回EOF(-1)。 fputc函數():(1)一般調用形式 fputc(ch,fp);(2)作用把一個字元寫到磁碟檔案上去,即將字元ch輸出到fp所指向的檔案中去。(3)傳回值成功:傳回值就是輸出的字元;失敗:返回EOF(-1)。說明:函數putchar()是在stdio.h中用預先處理命令定義的宏,即:#define putchar(c) fputc(c,stdout)
4、fgets()和fputs()函數:讀寫字串函數(1)fgets():char *fgets(char *str, int num, FILE *fp) 參數說明:str: 儲存從檔案讀取出來的字串 fp: 待讀檔案的檔案指標 num: 表示從檔案中讀出的字串不超過 n-1個字元。在讀入的最後一個字元後加上串結束標誌‘\0‘ (2)fputs(char * s,FILE * stream);
5、fscanf()和fprintf()函數:格式化讀寫函數(1)fprintf()函數:輸出格式化字串到流或者是將格式化後的字串寫到輸出資料流(檔案) 原型:int fprintf( FILE *stream, const char *format [, argument ]…); 例子:fprintf(fp, "%s %s %d %f", str1,str2, a, b) ; (2)fscanf()函數:輸出檔案中的內容到某個變數中。 int fscanf(FILE *stream, char *format,[argument...]); int fscanf(檔案指標,格式字串,輸入列表); for example: FILE *fp; char a[]; int b; double c; fscanf(fp,"%s%d%lf",a,&b,&c) 傳回值:整型,數值等於[argument...]的個數
6、ftell()函數:得到流式檔案的當前讀寫位置,其傳回值是當前讀寫位置偏離檔案頭部的位元組數。 原型:long ftell(FILE *fp)
7、 fseek()函數:把fp的檔案讀寫位置指標移到指定的位置。 int fseek(FILE *fp,long offset,int origin);origin指的是“起始點”,它有三個常量的值,如下:起始點對應的數字 代表的檔案位置SEEK_SET 0 檔案開頭SEEK_CUR 1 檔案當前位置SEEK_END 2 檔案末尾
8、 rewind()函數:將檔案指標重新指向一個流的開頭原型:int rewind(FILE *stream); 例子:一般我們會通過下面的方法來擷取檔案中字元的個數: FILE *fs=fopen("C:\1.txt","r");//建立檔案流 long length=0;//聲明檔案長度 fseek(fs,0,SEEK_END);//將檔案內部指標放到檔案最後面 length=ftell(fs);//讀取檔案指標的位置,得到檔案字元的個數 rewind(fs);//將檔案指標重設到檔案最前面
(轉載)C++檔案讀寫函數之——fopen、fread和fwrite、fgetc和fputc、fgets和fputs、ftellf和fseek、rewind