快速回忆:
b 见b表示二进制方式打开,一般都用该种方式较好
w 见w表示覆盖写,会清空,不存在会创建。 所以一般不用r这种。
如果要追加用a
+表示读写
如果读写都要开不是rw,而是r+。也就是写不是w表示写
。 wa表示写的两种方式 清空和追加。写的权限不用w表示,w主要特指清空
。如此记忆比较方便
在C语言里,fopen
函数用于打开文件,它的第二个参数是模式字符串,规定了文件的打开方式。
r表示读
w表示写
a表示追加方式打开,不存在会创建
r+表示读写方式打开,不存在会报错
w+表示读写方式打开,不存在会创建;存在会覆盖。
a+表示读写方式打开,写入会追加
w和a的区别在于a追加,w覆盖。
r必须存在。如果不存在自动创建用w或者a。如果不想清空用a。
带+表示读写都有。这里理解w的本质不是表示写,而是表示清空写。所以才有了+来表示读写,而不直接用rw。
带b的是处理二进制文件。
rb 必须存在
wb 存在则清空,不存在创建新的。
ab 追加 (同字符模式)
以及这些值带+,如上所述+表示读写都有,比如r的时候如果带+可以写入。wb和ab带+ 表示有读取的能力,也就是有对应的偏移指针。
rb+、wb+、ab+
1. 文本模式
r
:以只读方式打开文本文件,文件必须存在。
#include <stdio.h>
int main() {
FILE *fp = fopen("test.txt", "r");
if (fp == NULL) {
perror("文件打开失败");
return 1;
}
// 使用文件
fclose(fp);
return 0;
}
w
:以写入方式打开文本文件。若文件存在,内容会被清空;若文件不存在,则创建新文件。
#include <stdio.h>
int main() {
FILE *fp = fopen("test.txt", "w");
if (fp == NULL) {
perror("文件打开失败");
return 1;
}
fputs("Hello, World!", fp);
fclose(fp);
return 0;
}
a
:以追加方式打开文本文件。若文件存在,写入的数据会添加到文件末尾;若文件不存在,则创建新文件。
#include <stdio.h>
int main() {
FILE *fp = fopen("test.txt", "a");
if (fp == NULL) {
perror("文件打开失败");
return 1;
}
fputs("Appended text", fp);
fclose(fp);
return 0;
}
r+
:以读写方式打开文本文件,文件必须存在。
#include <stdio.h>
int main() {
FILE *fp = fopen("test.txt", "r+");
if (fp == NULL) {
perror("文件打开失败");
return 1;
}
// 读写操作
fclose(fp);
return 0;
}
w+
:以读写方式打开文本文件。若文件存在,内容会被清空;若文件不存在,则创建新文件。
#include <stdio.h>
int main() {
FILE *fp = fopen("test.txt", "w+");
if (fp == NULL) {
perror("文件打开失败");
return 1;
}
fputs("New content", fp);
rewind(fp);
// 读取操作
fclose(fp);
return 0;
}
a+
:以读写方式打开文本文件。若文件存在,写入的数据会添加到文件末尾;若文件不存在,则创建新文件。读写位置可以在文件任意处,但写入时总是追加到末尾。
#include <stdio.h>
int main() {
FILE *fp = fopen("test.txt", "a+");
if (fp == NULL) {
perror("文件打开失败");
return 1;
}
fputs("Appended content", fp);
rewind(fp);
// 读取操作
fclose(fp);
return 0;
}
2. 二进制模式
在文本模式的基础上,在模式字符串后面加上b
,就成了二进制模式,用于处理二进制文件。
rb
:以只读方式打开二进制文件,文件必须存在。wb
:以写入方式打开二进制文件。若文件存在,内容会被清空;若文件不存在,则创建新文件。
#include <stdio.h>
int main() {
FILE *fp = fopen("test.bin", "wb");
if (fp == NULL) {
perror("文件打开失败");
return 1;
}
int num = 123;
fwrite(&num, sizeof(int), 1, fp);
fclose(fp);
return 0;
}
ab
:以追加方式打开二进制文件。若文件存在,写入的数据会添加到文件末尾;若文件不存在,则创建新文件。rb+
:以读写方式打开二进制文件,文件必须存在。wb+
:以读写方式打开二进制文件。若文件存在,内容会被清空;若文件不存在,则创建新文件。ab+
:以读写方式打开二进制文件。若文件存在,写入的数据会添加到文件末尾;若文件不存在,则创建新文件。读写位置可以在文件任意处,但写入时总是追加到末尾。
这些模式参数能让你根据不同的需求对文件进行操作。在处理二进制文件时,一定要使用二进制模式,这样可以避免文本模式下可能出现的换行符转换等问题。