文件输入输出
使用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. | 打开方式 | 含义 |
---|---|---|
1 | r(read) | 读 |
2 | w(write) | 写 |
3 | a(append) | 追加 |
4 | +(plus) | 读或写,主要是配合r、w、a使用 |
5 | t(text) | 文本文件(默认) |
6 | b(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. | 参数 | 作用 |
---|---|---|
1 | ptr | 一个指针,在fread()中是从文件里读入的数据存放的地址;在fwrite()中是写入到文件里的数据存放 的地址。 |
2 | size | 每次要读写的字节数 |
3 | count | 读写的次数 |
4 | stream | 文件指针 |
- 返回值
成功读取/写入的字节数
有关文件的其他操作 https://www.jianshu.com/p/abaab1174b3d