C/C++中的文件操作

1.fopen()
  fopen的原型是:FILE *fopen(const char *filename,const char *mode),fopen實現三個功能

爲使用而打開一個流 
把一個文件和此流相連接 
給此流返回一個FILE指針
參數filename指向要打開的文件名,mode表示打開狀態的字符串,其取值如下表

字符串 含義 
"r" 以只讀方式打開文件 
"w" 以只寫方式打開文件 
"a" 以追加方式打開文件 
"r+" 以讀/寫方式打開文件,如無文件出錯 
"w+" 以讀/寫方式打開文件,如無文件生成新文件 

  一個文件可以以文本模式或二進制模式打開,這兩種的區別是:在文本模式中回車被當成一個字符''/n'',而二進制模式認爲它是兩個字符0x0D,0x0A;如果在文件中讀到0x1B,文本模式會認爲這是文件結束符,也就是二進制模型不會對文件進行處理,而文本方式會按一定的方式對數據作相應的轉換。

 

系統默認的是以文本模式打開,可以修改全部變量_fmode的值來修改這個設置,例如_fmode=O_TEXT;就設置默認打開方式爲文本模式;而_fmode=O_BINARY;則設置默認打開方式是二進制模式。
  我們也可以在模式字符串中指定打開的模式,如"rb"表示以二進制模式打開只讀文件,"w+t"或"wt+"表示以文本模式打開讀/寫文件。
  此函數返回一個FILE指針,所以申明一個FILE指針後不用初始化,而是用fopen()來返回一個指針並與一個特定的文件相連,如果成敗,返回NULL。

 

例:
  FILE *fp; 
  if(fp=fopen("123.456","wb"))
    puts("打開文件成功");
  else 
    puts("打開文件成敗"); 

 

 

2.fclose() 
  fclose()的功能就是關閉用fopen()打開的文件,其原型是:int fclose(FILE *fp);如果成功,返回0,失敗返回EOF。

  在程序結束時一定要記得關閉打開的文件,不然可能會造成數據丟失的情況,我以前就經常犯這樣的毛病。

 

3.fputc()
  向流寫一個字符,原型是int fputc(int c, FILE *stream); 成功返回這個字符,失敗返回EOF。

 

4.fgetc()
  從流中讀一個字符,原型是int fputc(FILE *stream); 成功返回這個字符,失敗返回EOF。

 

5. fseek()
  此函數一般用於二進制模式打開的文件中,功能是定位到流中指定的位置,原型是int fseek(FILE *stream, long offset, int whence);如果成功返回0,參數offset是移動的字符數,whence是移動的基準,取值是


符號常量 值 基準位置 
SEEK_SET 0 文件開頭 
SEEK_CUR 1 當前讀寫的位置 
SEEK_END 2 文件尾部 

例:fseek(fp,1234L,SEEK_CUR);//把讀寫位置從當前位置向後移動1234字節(L後綴表示長整數)
  fseek(fp,0L,2);//把讀寫位置移動到文件尾

 

6.fputs()
  寫一個字符串到流中,原型int fputs(const char *s, FILE *stream); 

例:fputs("I Love You",fp);

7.fgets()
  從流中讀一行或指定個字符,原型是char *fgets(char *s, int n, FILE *stream); 從流中讀取n-1個字符,除非讀完一行,參數s是來接收字符串,如果成功則返回s的指針,否則返回NULL。

 

8.fprintf()
  按格式輸入到流,其原型是int fprintf(FILE *stream, const char *format[, argument, …]);其用法和printf()相同,不過不是寫到控制檯,而是寫到流罷了

例:fprintf(fp,"%2d%s",4,"Hahaha");

9.fscanf()
  從流中按格式讀取,其原型是int fscanf(FILE *stream, const char *format[, address, …]);其用法和scanf()相同,不過不是從控制檯讀取,而是從流讀取罷了。

例:fscanf(fp,"%d%d" ,&x,&y);

10.feof()
  檢測是否已到文件尾,是返回真,否則返回0,其原型是int feof(FILE *stream);

例:if(feof(fp))printf("已到文件尾");

11.ferror()
  原型是int ferror(FILE *stream);返回流最近的錯誤代碼,可用clearerr()來清除它,clearerr()的原型是void clearerr(FILE *stream);

例:printf("%d",ferror(fp));

12.rewind()
  把當前的讀寫位置回到文件開始,原型是void rewind(FILE *stream);其實本函數相當於fseek(fp,0L,SEEK_SET);

例:rewind(fp);

12.remove()
  刪除文件,原型是int remove(const char *filename); 參數就是要刪除的文件名,成功返回0。

例:remove("c://io.sys");

13.fread()
  從流中讀指定個數的字符,原型是size_t fread(void *ptr, size_t size, size_t n, FILE *stream);參數ptr是保存讀取的數據,void*的指針可用任何類型的指針來替換,如char*、int *等等來替換;size是每塊的字節數;n是讀取的塊數,如果成功,返回實際讀取的塊數(不是字節數),本函數一般用於二進制模式打開的文件中。

例:

      char x[4230];
  FILE *file1=fopen("c://msdos.sys","r");
  fread(x,200,12 ,file1);//共讀取200*12=2400個字節

 

14.fwrite()
  與fread對應,向流中寫指定的數據,原型是size_t fwrite(const void *ptr, size_t size, size_t n, FILE *stream);參數ptr是要寫入的數據指針,void*的指針可用任何類型的指針來替換,如char*、int *等等來替換;size是每塊的字節數;n是要寫的塊數,如果成功,返回實際寫入的塊數(不是字節數),本函數一般用於二進制模式打開的文件中。

例:
  char x[]="I Love You";
  fwire(x, 6,12,fp);//寫入6*12=72字節
  將把"I Love"寫到流fp中12次,共72字節

 

 

發佈了138 篇原創文章 · 獲贊 1 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章