前言
在我们运行某些程序的时候,可能需要将程序运行中的数据存入一个文档中保存下来,c语言中提供了这类操作的函数,具体使用如下:
1. fopen:打开文件
FILE *fopen(char restrict *filename, char restrict *mode);
传入的参数意义:
filename
:指向某个待打开文件的指针
mode
:文件打开方式
相关文件打开方式如下表:
mode(文件打开方式) | 含义 |
---|---|
r (read) | 读 |
w(write) | 写 |
a(append) | 追加 |
t (text) | 文本文件 |
b(binary) | 二进制文件 |
+(plus) | 主要配合r,w,a使用 |
关于+
的配合使用如下表:
mode | 含义 |
---|---|
r+ | 在r的基础上增加了w的功能,即可读可写 |
w+ | 在w的基础上增加了r的功能,即可读可写 |
a+ | 在追加的基础上增加读功能,即可读可追加(可读可写) |
关于b
的使用
mode | 含义 |
---|---|
rb | 只读方式打开一个二进制文件 |
wb | 只写方式打开一个二进制文件 |
ab | 以追加的方式打开一个二进制文件 |
rb+ | 读写方式打开一个二进制文件 |
wb+ | 读写方式打开一个二进制文件 |
ab+ | 追加的方式打开一个可读可写二进制文件 |
需要注意的是:
- mode中含有
r
的时候要求操作的文件必须存在,而使用含有w
和a
的mode打开某个不存在的文件时创建这个文件,用含有w
的mode打开一个已经存在的文件时,将会清空内容。- 如果文件顺利打开,则返回值是指向这个文件流的文件指针,如果文件打开失败,返回NULL。
2. fclose:关闭文件
int flcose(FILE* stream);
如果成功释放,返回0, 否则返回EOF(-1);
3. fprintf:将数据写入文件
函数声明如下:
int fprintf(FILE *stream, char *format, argument...);
stream: 文件描述符,就是使用fopen打开某个文件的返回值;
format: 将argument中的数据以format的格式放入该文件中;
argument: 可以是某个数组或其他的结构体之类的,他们中的内容将会放入我们打开的文件中。
4. fscanf:从文件中读出数据
函数声明如下:
int fscanf(FILE *stream, char *format, argument... );
stream: 文件描述符,就是使用fopen打开某个文件的返回值;
format: 将文件中的数据以format的格式放入argument中;
argument: 可以是某个数组或其他的结构体之类的,j将我们打开的文件中的内容放入他们中。
5. 关于文件操作的代码
argv: 命令行参数数量
argc: 命令行参数
如 ./a.out file
rgc = 2
argv[2] = {./a.out, file}
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[]) {
FILE *fp = fopen(argv[1], "w+");
if(fp == NULL) {
printf("error\n");
return -1;
}
int a[] = {0,2,0,7,1,3,1,4};
for(int i=0; i<sizeof(a)/sizeof(int); ++i){
fprintf(fp,"%d\n", a[i]);
}
int n = sizeof(a)/sizeof(int);
int b[n];
for(int i=0; i<n; ++i){
fscanf(fp, "%d", a+i);
}
printf("b[n] = ");
for(int i=0; i<n; ++i){
printf("%d ", a[i]);
}
printf("\n");
fclose(fp);
fp = NULL;
}
运行结果如下: