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 }

 

posted @ 2019-04-02 22:43  落影无痕  阅读(4563)  评论(0编辑  收藏  举报