C 操作文件函数

打开文件 fopen

打开一个文件,返回操作文件的指针

1
FILE *fopen(const char *path, const char *mode)

参数说明:

  1. path 文件的路径
  2. 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)

参数说明:

  1. ptr 读取数据存储指针
  2. size 读取字节数
  3. nitems 读取次数
  4. stream 打开文件指针

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
FILE *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)

参数说明:

  1. ptr 为接收数据的指针, 也即数据存储的地址
  2. size 单个元素的大小,即由指针写入地址的数据大小
  3. nitems 元素个数
  4. stream 打开文件的指针

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
FILE * 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)

参数说明:

  1. stream 文件指针,打开文件时返回的指针
  2. offset 指针的偏移量
  3. whence 指针偏移起始位置

示例:

1
2
3
4
5
6
7
8
9
10
11
12
FILE *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
2
3
4
5
6
FILE *fp = fopen("./file.txt", "r");
if (NULL == fp) {
printf("open error\n");
return 1;
}
fclose(fp);

©版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 & 作者信息

End

坚持原创技术分享,您的支持将鼓励我继续创作!
Flyertutor WeChat Pay

WeChat Pay

Flyertutor Alipay

Alipay