C语言:文件操作

文件输入输出

使用printf()和命令行重定向>实现文件输出;使用scanf()和命令行重定向<实现文件输入。

  • hello.c
char name[256];
scanf("%s",name);
printf("Hello %s\n",name);
  • 编译
gcc Hello.c -o Hello

执行

Hello > Hi.txt
Hello < Hi.txt
Hello < Hi.txt > Hello.txt
1.fopen和fclose
1.1打开文件fopen
  • 函数原型
#include <stdio.h>
FILE *fopen(char restrict *filename, char restrict *mode);

restrict C99标准才引进的,属于类型修饰符,表示修饰的这块内存空间只能被这个指针引用和修改,除此之外别无他法。

  • 说明
    1.filename 是需要打开的文件
    2.mode是文件打开的方式
No.打开方式含义
1r(read)
2w(write)
3a(append)追加
4+(plus)读或写,主要是配合r、w、a使用
5t(text)文本文件(默认)
6b(binary)二进制文件
打开方式含义
r以只读的方式打开文件,前提是这个文件必须存在(只写 r 默认是文本文件)
r+以可读可写的方式打开文件,前提是这个文件必须存在(默认是文本文件)。
rb以只读的方式打开一个二进制文件,前提是这个文件必须存在。
rb+以可读可写的方式打开一个二进制文件,前提是这个文件必须存在。
w以只写的方式打开文件,如果这个文件不存在,就创建这个文件;如果这个文件存在,则清空内容。
w+以可读可写的方式打开文件,如果这个文件不存在,就创建这个文件;如果这个文件存在,则清空内容。
wb以只写的方式打开一个二进制文件,如果这个文件不存在,就创建这个文件;如果这个文件存在,则清空内容。
wb+以可读可写的方式打开一个二进制文件,如果这个文件不存在,就创建这个文件;如果这个文件存在,则清空内容。
a以追加的方式打开只写文件,如果这个文件不存在,就创建这个文件;如果这个文件存在,则在文件尾部追加内容。
a+以追加的方式打开一个可读可写的文件,如果这个文件不存在,就创建这个文件;如果这个文件存在,则在文件尾部追加内容。
ab以追加的方式打开一个二进制只写文件,如果这个文件不存在,就创建这个文件;如果这个文件存在,则在文件尾部追加内容。
ab+以追加的方式打开一个二进制可读可写文件,如果这个文件不存在,就创建这个文件;如果这个文件存在,则在文件尾部追加内容。
  • 返回值
    如果文件顺利打开,则返回值是指向这个文件流的文件指针,如果文件打开失败,返回NULL。
1.2fclose
  • 函数原型
int flcose(FILE* stream);
  • 返回值
    如果成功释放,返回0, 否则返回EOF(-1);
    文件打开判断
FILE *fp = fopen("文件路径", "打开方式");
if(NULL != fp){
   //code 
   fclose(fp);
}
文件的读(fscanf)和写(fprintf)
  • 函数原型
int fprintf(FILE *stream, char *format, argument...);
int fscanf(FILE *stream, char *format, argument... );

fprintf()/fscanf()与printf()/scanf()使用非常相似,区别在于fprintf()/fscanf()第一个参数stream是文件描述符。

  • 将数据写入文件
int i = 10;
float f = 3.14;
char c = 'C';
char str[10] = "haha";
fprintf(fp, "%d %f %c %s\n", i, f, c, str);  
  • 将文件中的数据读出
int i = 10;
float f = 3.14;
char c = 'C';
char str[10] = "haha";
fscanf(fp, "%d %f %c %s\n", &i, &f, &c, str); 

如果不需要从文件里面写入字符串,那么就可以用逗号或者其他符号来分隔;如果文件里需要写入字符串,那么字符串与其他数据之间只能用空格和回车来分隔。

二进制读写:fread()和fwrite()
  • 函数原型
size_t fread(void *ptr, size_t size, size_t count, FILE* stream);
size_t fwrite(void *ptr, size_t size, size_t count, FILE* stream);
  • 参数说明
No.参数作用
1ptr一个指针,在fread()中是从文件里读入的数据存放的地址;在fwrite()中是写入到文件里的数据存放 的地址。
2size每次要读写的字节数
3count读写的次数
4stream文件指针
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值