1. 程式人生 > >C語言檔案操作學習記錄

C語言檔案操作學習記錄

  1. 檔案開啟 fopen()

FILE *fopen(const char *pname, const char *mode)

 引數  1.pname  開啟檔案的路徑,可絕對,可相對

  2. mode 開啟檔案的方式

r 只讀,檔案必須存在

r+ 可讀寫,檔案必須存在

rb+ 二進位制檔案 同 r+

w 只寫 檔案存在則刪除其內容,不存在則建立檔案

w+ 讀寫 檔案存在則刪除其內容,不存在則建立檔案

a  追加僅可寫  檔案存在,在末尾附加內容,不存在則建立檔案

a+ 追加讀寫   檔案存在,在末尾附加內容,不存在則建立檔案

 返回值  開啟成功返回FILE 的有效地址,失敗返回NULL

FILE *fp;

if((fp=fopen("test","r")) == NULL)

{

printf("The file can not be opened.\m");

exit(1);

}

注意:C語言將計算機的輸入輸出裝置如鍵盤、螢幕均看成檔案處理,ANSI C 標準中規定,執行程式時系統自動開啟鍵盤、螢幕、錯誤三個檔案,這三個檔案指標由系統初始化,標準輸入stdin,標準輸出 stdout, 標準錯誤 stderr。

 

  1. 檔案關閉, fclose()

int fclose(FILE *fp);

關閉檔案流,成功時返回0,否則返回EOF

  1. 檔案讀寫 :
    1. fgetc() 從檔案中讀取一個字元

char ch=fgetc(fp);//從當前指標位置讀取一個字元

ch=fgetc(fp); //fp所指檔案的當前指標位置讀取一個字元

while(ch!=EOF) //判斷剛讀取的字元是否是檔案結束符

{

     putchar

(ch); //若不是結束符,將它輸出到螢幕上顯示

    ch=fgetc(fp); //繼續從fp所指檔案中讀取下一個字元

} //完成將fp所指檔案的內容輸出到螢幕上顯示

fclose(fp); //關閉fp所指檔案

  1. fputc() 寫一個字元到檔案中去

int fputc(int ch, FILE *fp) // 正常返回要寫入的字元程式碼,否則返回EOF

  1. fgets() 從檔案中讀取一個字串

char *fgets(char *str, int n, FILE *fp)

fp指向的檔案中讀取n-1個字元,並存放至str指出的字元陣列中,最後加上結束符'\0'

str:接收字串的記憶體地址,可以是陣列名,也可以是指標

正常返回str的值即str地址),非正常返回NULL

  1. fputs() 寫一個字串到檔案中去

int fputs(char *str, FILE *fp)

正常返回str的值即str地址),非正常返回NULL

  1. fprintf() 往檔案中寫格式化資料

int fprintf(FILE *fp, char *format, arg_list)

用法同 printf 多一個變數fp,寫到檔案中去,printf() 將資料寫入螢幕檔案stdout

  1. fscanf() 格式化讀取檔案中資料

int fscanf(FILE *fp, char *format, arg_list)

  1. fread() 以二進位制形式讀取檔案中的資料

int fread( void *buffer,  size_t size, size_t num, FILE *fp);

buffer  fp中讀取的資料到緩衝區的首地址

size 讀取一個數據塊的位元組數

count 一次讀取塊的數量

正常返回資料塊的個數即num, 異常返回0

  1. fwrite() 以二進位制形式寫資料到檔案中去

struct Worker

{

int number;

char name[20];

int age;

};

struct Worker wk;

FILE *in, *out;

while(fread(&wk,sizeof(struct worker),1,in)==1)

fwrite(&wk,sizeof(struct worker),1,out);

  1. getw()  以二進位制形式讀取一個整數

int getw(FILE *fp)

讀取整數

正常返回讀取的整數,異常返回EOF -1

  1. putw()  以二進位制形式儲存一個整數

int putw(int n, FILE *fp);

正常返回輸出值,異常EOF -1

  1. 檔案狀態檢查函式  
    1. feof  判斷檔案結束

int feof(FILE *fp)

        未結束返回0, 結束返回1

  1. ferror 檔案讀/寫 出錯

int ferror(FILE *fp)

無錯誤返回0 有錯誤 返回1

  1. clearerr 清除檔案錯誤標誌

void clearerr(FILE *fp)

  1. 檔案定位函式  
    1. rewind 重置位置指標

void rewind(FILE *fp)

使fp指向的檔案位置指標重新指向檔案的開頭位置

  1. fseek 移動檔案的位置指標

int fseek(FILE *fp, long offset, int base)

使檔案指標fp移到基於base的相對位置offset

offset 相對於base 的位元組位移量,

  1. ftell 瞭解檔案指標的當前位置

long ftell(FILE *fp)

取得由fp指定檔案的當前讀/寫位置,該位置用相對於檔案開頭的位移量來表示

正常返回位移量,異常返回-1,表示出錯

// 通過下列方式可以計算出檔案大小

fseek(fp,0,SEEK_END); // 先使用SEEK_END將指標移動到檔案最後

ftell(fp);//然後使用ftell獲得最後的偏移位元組數,也就是檔案的大

 

  1. 二進位制和文字模式區別
    1. 在windows系統中,文字模式下,檔案以"\r\n"代表換行。若以文字模式開啟檔案,並用fputs等函式寫入換行符"\n"時,函式會自動在"\n"前面加上"\r"。即實際寫入檔案的是"\r\n" 。
    2. 在類Unix/Linux系統中文字模式下,檔案以"\n"代表換行。所以Linux系統中在文字模式和二進位制模式下並無區別。
    3. 在windows下,讀寫文字檔案的時候,是不寫b的,但讀寫二進位制檔案的時候一定要寫b,Linux,b是忽略的
  2. 參考
1.https://www.cnblogs.com/saolv/p/7793379.html

2.https://www.cnblogs.com/yongdaimi/p/6628806.html 

 

 

感覺學習時還是記錄下,效果比較好,本篇文章主要是自己閱讀這倆篇部落格時的一些記錄,抄襲為主,但是在自己整理時也可以感受到如此比光看不記錄效果還是好不少,內容直接是複製我的OneNote筆記而來,格式有些錯亂, 第一次寫部落格,排版不是那麼美,也希望可以和愛學習的大家一起進步。