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 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 为DeepSeek添加本地知识库
· 精选4款基于.NET开源、功能强大的通讯调试工具
· DeepSeek智能编程
· 大模型工具KTransformer的安装
· [计算机/硬件/GPU] 显卡