1. 程式人生 > >c文件操作整理

c文件操作整理

重新 fgetc define 文件處理 保持 字符 指定 狀態 pre

《c陷阱與缺陷》

FILE *fp;
fp = fopen(file, "r+");

編程者也許認為,程序一旦執行上述操作完畢,就可以自由地進行讀取和寫入的操作了。遺憾的是,事實總難遂人所願,為了保持與過去不能同時進行讀寫操作的程序的向下兼容性,一個輸入操作不能隨後直接緊跟輸出操作,反之亦然。如果同時進行輸入和輸出操作,必須在其中插入fseek函數調用。

這個陷阱把我坑了一把,所以將c庫函數文件操作學習整理一番,方便自己以後查閱。

- FILE結構體
在stdio.h中定義的FILE結構體。

#ifndef _FILE_DEFINED
  struct _iobuf {
    char *_ptr;             //
文件輸入下一個位置 int _cnt; //當前緩沖區相對位置 char *_base; //文件起始位置 int _flag; //文件標誌 int _file; //文件描述符 int _charbuf; //檢查緩沖區狀況,如果無緩沖區則不讀取 int _bufsiz; //緩沖區大小 char *_tmpfname; //臨時文件名 }; typedef struct _iobuf FILE; #define _FILE_DEFINED #endif

- 文件的打開

 FILE *fopen(const char *path, const char *mode);

1.功能
  按照mode規定的方式去打開path裏指定文件。

2.參數
  path是個字符指針,指向打開或建立文件的字符串
  mode是指向文件處理的字符串的指針

技術分享圖片

3.返回值
  正常:被打開文件的FILE指針
  異常:NULL,未成功打開

- 文件的關閉

int fclose(FILE *fp);

1.功能
  關閉由fp指出的文件,調用操作系統提供的文件關閉功能。
2.參數
  fp:打開文件的FILE指針
3.返回值
  正常:0
  異常:EOF

- 文件讀取


①字符讀取

int fgetc(FILE *stream);

1.功能
  從stream所指文件中讀取一個字符
2.參數
  stream:要讀取字符文件的FILE指針
3.返回值
  正常:返回讀取字符
  異常:返回EOF



②字符串讀取

char *fgets(char *s, int size, FILE *stream);

1.功能
  從stream中讀取大小為size-1的字符,最後加上字符串結束符‘\0‘
2.參數
  s:接收字符串的地址,數組或是指針
  size:讀取字符大小
  stream:讀取的文件的FILE指針
3.返回值
  正常:字符串首地址(char *s的地址)
  異常:NULL

使用feof或是ferror去判別是否到達文件尾部和發生錯誤。


- 文件的寫入
①字符寫入

int fputc(int c, FILE *stream);

1.功能
  把字符c寫入stream指向的文件
2.參數
  c:字符
  stream:寫入的文件的FILE指針
3.返回值
  正常:寫入字符
  異常:EOF

②字符串的寫入

int fputs(const char *s, FILE *stream);

1.功能
  將str寫入stream指向的文件中
2.參數
  s:寫入字符串
  stream:要寫入字符串的文件的FILE指針
3.返回值
  正常:寫入的字符串長度
  異常:返回NULL

使用feof或是ferror去判別是否到達文件尾部和發生錯誤。

③格式化數據寫入

int fprintf(FILE *stream, const char *format, ...);

1.功能
  與printf功能相同,寫入文件中
2.參數
  stream:寫入的文件的FILE指針
  format:字符串指針,其中包含寫入數據的格式
3.返回值
  無


- 二進制形式的讀寫

①二進制形式讀取文件數據

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

1.功能
  按二進制形式將stream指向的文件的size*nmemb的數據讀到ptr數據區去
2.參數
  ptr:viod指針類型,讀到數據存放的首地址
  size:數據塊的大小,字節數
  nmemb:一次讀多少數據塊
  stream:要讀取數據文件的FILE指針
3.返回值
  正常:實際讀取數據塊個數
  異常:0(具體通過feof()和ferror()判定)

②二進制形式寫數據

size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);

  與fread相反

③二進制形式讀取一個整數

int getw(FILE *stream);

④二進制形式寫入一個整數

int putw(int w, FILE *stream);

- 文件狀態檢查
①文件結束

int feof(FILE *stream);

1.功能
  判斷文件是否結束
2.返回值
  0:文件未結束
  1:文件結束

②文件讀寫出錯

int ferror(FILE *stream);

1.功能
  檢查讀寫stream指向的文件是否出錯
2.返回值
  0:無錯誤
  1:出錯

③錯誤標誌清除

void clearerr(FILE *stream);

1.功能
  清楚stream指向的文件的錯誤標誌

- 文件的操作的文件
①當前文件位置

long ftell(FILE *stream);

1.功能
  文件開頭與當前的偏移量
2.返回值
  正常:位移量
  異常:-1

②倒帶

void rewind(FILE *stream);

1.功能
  文件位置指針重新指向開頭

③fseek

int fseek(FILE *stream, long offset, int whence);

1.功能
  使文件定位移到指定位置:基於whence的相對offest位置處
2.參數
  offset:字節位移量
  whence:
    SEEK_SET 0 文件開頭
    SEEK_CUR 1 文件當前位置
    SEEK_END 2 文件末尾
3.返回值
  正常:當前位置
  異常:-1

- exit()函數

void exit(int status);

1.功能
使程序立即終止執行,將緩沖區數據輸出並關閉所有打開文件
2.參數
0:正常終止


作者:Devil-wei

出處:https://www.cnblogs.com/Devil-wei/

版權聲明:本文版權歸作者,轉載請標註文章作者與出處

c文件操作整理