日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

3,C语言文件读写

發布時間:2025/4/16 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 3,C语言文件读写 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這兩天看到一個關于文件讀寫的題目,索性就把相關內容總結下。

C語言文件讀寫,無非是幾個讀寫函數的應用,fopen(),fread(),fwrite()等,下面簡單介紹下。

一、fopen()


  函數原型:FILE *fopen(const char *path, const char *mode);

  參數說明:path,所打開的文件名(包含文件路徑,缺省值為當前工程目錄);mode:流形態,后文詳述。

  返回值:文件指針。打開失敗,返回NULL;打開成功,返回指向該流的文件指針。

  mode詳解:mode就是打開文件的方式,讀寫?二進制?追加在文件末?等等。

  r: 只讀方式,文件需存在

  r+: 讀寫方式,文件需存在

  rb+: 讀寫二進制(binary)文件,不過好像只讀(可以自己測試)

  rw+: 讀寫文本文件

  w: 只寫文件。若文件存在,則覆蓋原內容;若不存在,新建文件

  w+: 讀寫。若文件存在,(寫時)則覆蓋原內容;若不存在,新建文件?

  a: append, 只寫文件。若文件存在,追加寫的內容到文件末;若不存在,新建文件

  a+: append,讀寫文件。若文件存在,追加寫的內容到文件末;若不存在,新建文件

?

?  wb: ?只寫。二進制文件。若不存在,新建文件

? ? ? ?wb+: 讀寫。二級制文件。若不存在,新建文件。

  值得注意的是,有的編譯器支持rw等參數,就好比linux中文件的屬性(rwx-421)。

?

二、fopen(), fwrite()


  1)函數原型size_t fread(void *ptr, size_t size, size_t count, FILE *stream);

   ?參數說明:ptr:數據buffer位置;size:每個數據類型的大小: count:數據的個數; stream:文件指針,指向待讀取的文件

?

  2)函數原型size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);

   參數說明: ptr,數據buffer位置;?每個數據類型的大小: count:數據的個數; stream:文件指針,指向待寫入的文件

  注意:這兩個函數也是配套fopen()函數來操作的,其讀寫文件的方式取決于fopen函數的mode參數。

?

三、文件讀寫實例


  這里,我們把一堆結構體數據寫入我的文件“myfile.dat”, 然后再從中讀取出來,回顯在console上。

1 #include <stdio.h> 2 #include <stdlib.h> 3 #define N 5 4 typedef struct 5 { 6 int num; 7 char name[10]; 8 char tel[10]; 9 } STYPE; 10 void check (); 11 12 int fun (STYPE *std) 13 { 14 FILE *fp = NULL; //定義時,fp最好指向空嗎? 15 int i; 16 if ((fp = fopen ( "myfile.dat ", " wb ")) == NULL) return 0; 17 18 printf(" \noutput data to file ! \n"); 19 for ( i = 0 ; i < N; i ++ ) 20 fwrite (&std[i], sizeof (STYPE), 1, fp); 21 fclose (fp); 22 fp = NULL; 23 return 1 ; 24 } 25 26 int main () 27 { 28 STYPE s[10] = { { 1, "aaaaa", "111111"}, 29 { 1, "bbbbb", "222222"}, 30 { 1, "ccccc", "333333"}, 31 { 1, "ddddd", "444444"}, 32 { 1, "eeeee", "555555"} }; 33 int k; 34 k = fun(s); 35 if (k == 1) 36 { 37 printf("Succeed !"); 38 check() ; 39 } 40 else 41 printf ( " Fail !"); 42 } 43 44 void check() 45 { 46 FILE *fp = NULL ; //定義時,fp最好指向空嗎?? 47 int i; 48 STYPE s[10]; 49 if ((fp = fopen ("myfile.dat ", "rb")) == NULL) 50 { 51 printf ( "Fail ! \n"); 52 exit (0); 53 } 54 printf ("\nRead file and output to screen :\n"); 55 printf ("\n num name tel \n"); 56 for ( i = 0; i < N; i++ ) 57 { 58 fread (&s[i], sizeof ( STYPE ), 1, fp); 59 printf (" % d %s %s \n", s[i].num, s[i].name, s[i].tel); 60 } 61 fclose (fp); 62 fp = NULL; //為了避免dangling pointer? 63 } View Code

?

  程序運行結果說明:

  1)我們觀察工程目錄下,多了一個myfile.dat的文件

  

  2)回顯在console

  

  注意事項:

  1)fclose(fp). 文件操作完成后,需要關閉文件流,可能會造成文件占用內存泄露;或者下次訪問文件時,出現不可預料的問題

  2)fp = NULL. 文件關閉后,需要將文件指針指向NULL。防止dangling pointer。

  3) 在最開始定義文件指針時,需要將其指向NULL嗎?僅從初始化的角度來看,指向NULL也許能避免一些安全問題。

?

轉載于:https://www.cnblogs.com/letgo/p/5728514.html

總結

以上是生活随笔為你收集整理的3,C语言文件读写的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。