fopen,fwrite,fread使用


fopen, fwrite, fread詳解

1、頭文件

#include <stdio.h>

2、fopen

(1) 函數原型

FILE *fopen(char *filename, *type)

函數用來打開一個文件

(2) 參數解析

  • filename,文件名
  • type,打開方式

  字符及其含義:

  打開方式由r,w,a,t,b,+這六個字符拼成,含義如下

  r(read):讀

  w(write):寫

  a(append):追加

  t(txt):文本文件,可省略

  b(banary):二進制文件

 

  "r"            打開文字文件只讀          

  "w"           創建文字文件只寫         

  "a"           增補, 如果文件不存在則創建一個     

  "r+"          打開一個文字文件讀/        

  "w+"         創建一個文字文件讀/          

  "a+"         打開或創建一個文件增補          

  "b"           二進制文件(可以和上面每一項合用)          

  "t"           文這文件(默認項)  

 

  使用方式及含義
  “rt”      只讀打開一個文本文件,只允許讀數據 
  “wt”      只寫打開或建立一個文本文件,只允許寫數據
  “at”      追加打開一個文本文件,並在文件末尾寫數據
  “rb”      只讀打開一個二進制文件,只允許讀數據
  “wb”        只寫打開或建立一個二進制文件,只允許寫數據
  “ab”        追加打開一個二進制文件,並在文件末尾寫數據
  “rt+”       讀寫打開一個文本文件,允許讀和寫
  “wt+”      讀寫打開或建立一個文本文件,允許讀寫
  “at+”       讀寫打開一個文本文件,允許讀,或在文件末追加數 
  “rb+”       讀寫打開一個二進制文件,允許讀和寫 
  “wb+”      讀寫打開或建立一個二進制文件,允許讀和寫
  “ab+”       讀寫打開一個二進制文件,允許讀,或在文件末追加數據

 

  ① 用”r”打開文件時,該文件必須存在,只讀

  ② 用”w”打開文件時,若文件不存在,則創建,若存在,則將其刪除,再創建一個文件

  ③ 用”a”打開文件時,可在其末尾寫數據

(3) 函數調用成功返回FILE*指針,失敗返回NULL

3、fwrite

(1) 函數原型

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

(2) 參數解析

  • ptr,要寫入的數據的指針
  • size,每個數據類型的大小
  • count,數據個數
  • stream,文件指針

(3) 函數調用成功返回寫入數據的個數,如果返回值與count不同,為寫錯誤

(4) 寫操作后最好調用fclose關閉流。

4、fread

(1) 函數原型

size_t fread ( void * ptr, size_t size, size_t count, FILE * stream )

(2) 參數解析

  • ptr,讀取數據保存結果的指針
  • size,每個數據類型的大小
  • count,數據個數
  • stream,文件指針

(3) 函數調用成功返回讀取的數據個數,如果返回值與count不同,為讀錯誤或者達到文件末尾

5、不關閉流的情況下,每次讀或寫數據后,文件指針都會指向下一個待寫或者讀數據位置的指針

6、size_t

size_t類型是ANSI C提供的標准頭文件里的一個數據類型,頭文件為:#include <stddef.h>。該頭文件一般位於/usr/lib/gcc/i486-linux-gnu/4.3.2/include目錄下。定義如下:

#define  __SIZE_TYPE__  long unsigned int

#define  __SIZE_TYPE__  size_t

也就是說size_t實際是long unsigned int類型,在32位機器上為4字節,在64位機器上為8字節。

 

7、程序示例:

 

 1 #include <stdio.h>
 2 
 3 int main()
 4 {
 5     FILE* file = fopen("/home/share/code/fopen_test/test.txt", "wt+");
 6     if(file == NULL)
 7     {
 8         printf("fopen error");
 9         return -1;
10     }
11     
12     size_t write_ret = fwrite("hello world", 1, sizeof("hello world"), file);
13     if(write_ret != sizeof("hello world"))
14     {
15         printf("fwrite error");
16         return -1;
17     }
18     
19     //將文件指針定位到文件開始,否則讀取不到數據
20     fseek(file, 0, SEEK_SET);
21     
22     char buf[32] = {0};
23     size_t read_ret = fread(buf, 1, sizeof("hello world"), file);
24     if(read_ret != sizeof("hello world"))
25     {
26         printf("fread error");
27         return -1;
28     }
29     
30     fclose(file);
31     printf("%s\n", buf);
32     
33     return 0;
34 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM