打开文件 fopen
打开一个文件,返回操作文件的指针1
FILE *fopen(const char *path, const char *mode)
参数说明:
- path 文件的路径
- mode 打开模式,也叫打开文件的方式
模式介绍:
r: 只读方式打开,文件必须存在
r+: 可读写,必须存在
rb+: 打开二进制文件,可以读写
rt+: 打开文本文件,可读写
w: 只写,文件存在则文件长度清0,文件不存在则建立该文件
w+: 可读写,文件存在则文件长度清0,文件不存在则建立该文件
a: 附加方式打开只写,不存在建立该文件,存在写入的数据加到文件尾,EOF符保留
a+: 附加方式打开可读写,不存在建立该文件,存在写入的数据加到文件尾,EOF符不保留
wb: 打开二进制文件,只写
wb+: 打开或建立二进制文件,可读写
wt+: 打开或建立文本文件,可读写
at+: 打开文本文件,可读写,写的数据加在文本末尾
ab+: 打开二进制文件,可读写,写的数据加在文件末尾
由mode字符可知,上述如r、w、a在其后都可以加一个b,表示以二进制形式打开文件
读取文件 fread
读取二进制文件内容,返回读取数据的个数1
size_t fread(void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream)
参数说明:
- ptr 读取数据存储指针
- size 读取字节数
- nitems 读取次数
- stream 打开文件指针
示例:1
2
3
4
5
6
7
8
9
10
11
12
13FILE *fp = fopen("./file.txt", "r");
if (NULL == fp) {
printf("open error\n");
return 1;
}
while (!feof(fp)) {
if (fread(str, sizeof(str), 1, fp)) {
printf("%s", str);
}
}
if (strlen(str) > 0) {
printf("%s", str);
}
写入文件 fwrite
将信息写入二进制文件,返回写入数据的个数1
size_t fwrite(const void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream)
参数说明:
- ptr 为接收数据的指针, 也即数据存储的地址
- size 单个元素的大小,即由指针写入地址的数据大小
- nitems 元素个数
- stream 打开文件的指针
示例:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15FILE * fp = fopen("file.txt", "w");
if (NULL == fp) {
printf("error\n");
return 1;
}
char *str = "hello fwrite";
int res = fwrite(str, strlen(str), 1, fp);
if (res != 1) {
printf("write error\n");
fclose(fp);
return 1;
}
fclose(fp);
return 0;
重定位文件内部指针 fseek
重定位文件内部的指针,这个指针和文件打开时返回的指针是不同的
成功返回 0,失败返回非 0 值1
int fseek(FILE *stream, long offset, int whence)
参数说明:
- stream 文件指针,打开文件时返回的指针
- offset 指针的偏移量
- whence 指针偏移起始位置
示例:1
2
3
4
5
6
7
8
9
10
11
12FILE *fp = fopen("./file.txt", "r");
if (NULL == fp) {
printf("open error\n");
return 1;
}
char c;
if (fseek(fp, 2, SEEK_SET) == 0) {
fread(&c, 1, 1, fp);
printf("%c\n", c);
}
fclose(fp);
return 0;
关闭文件 fclose
关闭打开的文件1
int fclose(FILE *stream);
传入需要关闭的文件指针即可。
1 | FILE *fp = fopen("./file.txt", "r"); |
©版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 & 作者信息。
End