C標(biāo)準(zhǔn)庫 操作文件

數(shù)據(jù)持久化的兩種方法:文件和數(shù)據(jù)庫
文本文件和二進(jìn)制文件
舉個(gè)例子,寫C++的代碼,源代碼為文本文件、編譯出來的可執(zhí)行文件(.exe)文件是二進(jìn)制文件
文本文件
以文本的編碼(ASCII碼、UNICODE編碼等)形式存儲在計(jì)算機(jī)中。它是以"行"為基本結(jié)構(gòu)的一種信息組織和存儲方式。
文本文件是基于字符編碼的文件,基本上是定長的,譯碼容易些
二進(jìn)制文件
文本的二進(jìn)制形式存儲在計(jì)算機(jī)中,用戶一般不能直接讀懂它們,只有通過相應(yīng)的軟件才能將其顯示出來。
二進(jìn)制文件編碼是變長的,所以它靈活,存儲利用率要高些,譯碼難一些(不同的二進(jìn)制文件格式,有不同的譯碼方式)
二進(jìn)制文件一般是可執(zhí)行程序、圖形、圖像、聲音等等。
C標(biāo)準(zhǔn)庫操作文件的函數(shù)fopen(打開)和fclose(關(guān)閉)
fopen()函數(shù)
FILE *fopen(cosnt char *path,const char * mode);
其中第一個(gè)參數(shù)為文件路徑,第二個(gè)參數(shù)為打開模式
成功返回I/O流指針,作為后續(xù)I/O流函數(shù)的參數(shù)
失敗返回NULL
打開模式
打開模式作用作用r只讀文件必須存在,從頭開始讀w只寫文件不存在就創(chuàng)建,文件存在就清空內(nèi)容,從頭開始寫a追加文件不存在就創(chuàng)建,文件存在就在文件尾開始寫r+讀寫文件必須存在,從頭開始讀寫w+寫讀文件不存在就創(chuàng)建,文件存在就清空內(nèi)容,從頭開始寫讀a+追讀文件不存在就創(chuàng)建,文件存在就在文件尾開始寫,從頭開始讀
fclose()函數(shù)
int fclose(FILE * fp)
參數(shù)為I/O流指針
成功返回0,失敗返回EOF(End Of File)
操作文件的步驟
聲明文件I/O流指針
打開文件
對文件的操作
關(guān)閉文件,I/O流指針置為NULL
格式化I/O
格式化輸出
fprintf(fp,"%d",520)
; 輸出到fp指代的文件中
格式化輸入
fscanf(fp,"%d",&num)
; 把從文件中讀取到的數(shù)據(jù)放入num中
二進(jìn)制I/O
二進(jìn)制輸入
例如:int a[9] = {0,1,2,3,4,5,6,7,8};
fwrite(a,sizeof(int),9,fp);
將a數(shù)組寫入至fp指向的文件中
二進(jìn)制輸出
fread(a,sizeof(int),9,fp);
從fp指向的文件中讀取數(shù)據(jù)放入a中
文件讀寫位置
設(shè)置文件讀寫位置
成功返回0,失敗返回-1
例如:fseek(fp,8,SEEK_SET)
從fp文件頭開始往后數(shù)8字節(jié)的位置開始

fseek(fp,-12,SEEK_END)
從fp文件尾開始往前數(shù)12字節(jié)的位置開始

獲取文件操作位置
long feel(FILE *stream)參數(shù)為I/O流指針
成功返回當(dāng)前文件位置,失敗返回-1