1. 程式人生 > 實用技巧 >C語言檔案操作-1-

C語言檔案操作-1-

讀寫檔案操作與普通的printf、scanf

程式碼操作平臺功能
printf 螢幕 標準輸出
scanf 鍵盤 標準輸入
perror 螢幕 標準輸出錯誤

系統檔案

功能程式碼巨集定義
標準輸入 stdin 0
標準輸出 stdout 1
標準錯誤 stderr 2

系統檔案在應用程式執行時會自動開啟,結束時系統自動關閉(隱式回收)

檔案指標和普通指標的相同和區別:

定義方式:

採用了系統特定的結構體FILE來處理。

FILE *fp = NULL;

操作檔案方式:

開闢指標

藉助檔案操作函式來改變fp為空和野指標。

fopen();
//函式相當於C裡面的malloc函式來開闢空間

操作檔案:

使用檔案讀寫來完成

fput,fputs,fgetc,fgets,fread,fwrite函式等

檔案分類:

裝置檔案:

螢幕,顯示卡,鍵盤,磁碟等

磁碟檔案:

文字檔案:

由ASCII碼寫成

二進位制檔案:

由bin二進位制編碼完成

檔案操作的一般步驟:

  1. 開啟檔案 fopen()函式

  2. 讀寫檔案:fputc,fputs等函式

  3. 關閉檔案:fclose()函式

開啟、關閉檔案函式

//fopen函式原型
FILE *fopen(const char *filename,const char *mode);

引數1 const char *filename的filename

表示的是檔案訪問路徑,可以是絕對路徑也可以是相對路徑

引數2 const char* mode

檔案開啟許可權

引數操作
r 只讀方式開啟檔案,不存在則報錯
w 只寫方式開啟檔案,如果檔案存在就直接覆蓋檔案重新寫,如果不存在則建立檔案再寫
w+ 寫、讀方式開啟檔案,如果檔案存在則覆蓋檔案重新寫,如果不存在就建立檔案再寫
r+ 讀、寫方式開啟檔案,如果檔案不存在則失敗
a 以再檔案以後的內容後面追加來開啟檔案
b 以二進位制形式開啟檔案

可以複合則使用如(ab)

fopen函式開啟成功則返回檔案的檔案指標,失敗則返回NULL

檔案訪問路徑:

絕對路徑:

從磁碟的根目錄開始描寫 如:C:/User/test.txt

書寫方法:

情況書寫方法
Windows下特有 C:\\user\\test.txt
Windows和linux通用 C:/User/test.txt

相對路徑:

針對於啟動項的環境。

如果是使用xxx.exe來執行,就是相對於xxx.exe的檔案路徑

如果是用VS環境下,就值在.vcxproj所在目錄的檔案路徑

具體操作函式:

檔案結束標記:

也就是會返回一個EOF,在巨集定義上EOF也就是-1的意思,可以通過fp和EOF來判斷檔案是否讀取到結束。

按字元寫檔案fputc:

//函式原型
int fgetc(FILE *stream)
引數

FILE *stream

stream也就是帶讀取的檔案的fp(指標)

返回值

成功:就是讀到對應字元的ASCII碼

失敗:返回-1

實現demo:

https://www.cnblogs.com/beautiful7/p/13915853.html

feof()函式

//函式原型
int feof(FILE *stream);
引數:

FILE *stream

返回值:

返回條件返回值
到達檔案末尾 真(非0值)
沒有到達檔案末尾 假(0值)
作用:

用來判斷是否到達檔案末尾,對於二進位制檔案和字元檔案都OK

特徵:

呼叫feof函式來判斷,必須使用正確的呼叫指標來處理。

fgets()函式

作用:

獲取一個字串,用\n來作為結尾標記,自動在最後新增'\0',如果空間夠大就會把\n也讀入,如果不夠就捨棄\n,但是\0必有

//函式原型
char *fgets(char *str,int size,FILE *stream);
引數:

引數作用
char *str 表示需要提取到的字串首地址
int size 表示需要提取的空間大小
FILE *stream 表示檔案指標
返回值:

成功:返回讀取到的字串

失敗:返回NULL

實現demo:

https://www.cnblogs.com/beautiful7/p/13915880.html

fputs()函式

功能:

寫入一個字串,如果字串中沒有\n就不會寫\n

//函式原型
int fputs(const char *str,FILE *stream);
引數
引數
const char *str 字串首地址
FILE *stream 檔案指標