fopen打开模式
r 以只读方式打开文件,该文件必须存在。
-
r+ 具有读写属性,从文件头开始写,保留原文件中没有被覆盖的内容。
当PATH1对应文件不存在时候,发现r+方式打开失败。新建文件后执行程序
运行结果为:第一次的内容被覆写[r+ read] abcdefg [r read] abcdefg ----------------- [r+ read] 123defg [r read] 123defg
-
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
运行结果:第一次写的内容被清空[r read] abcdefg ----------------- [r read] 123
-
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
运行结果:[w+ read] abcdefg [r read] abcdefg ----------------- [w+ read] 123 [r read] 123
-
a 以追加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
运行结果:第二次写的内容追加在第一次写的内容中[r read] abcdefg ----------------- [r read] abcdefg123
-
a+ 以追加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。
[a+ read] abcdefg [r read] abcdefg ----------------- [a+ read] abcdefg123 [r read] abcdefg123
示例代码
#include <stdio.h>
#include <mem.h>
char *PATH1 = "D:\\code\\CProject\\FileDemo\\1";
void write(const char *content, const char *path, const char *mode, int isRead);
void read(const char *path);
struct MODE {
char mode[5];
int isRead;
};
int main() {
//文本文件写的模式
struct MODE modes[] = {
{"r+", 1},
{"w", 0},
{"w+", 1},
{"a", 0},
{"a+", 1},
};
for (int i = 0; i < 5; i++) {
struct MODE mode = modes[i];
printf("=========%s write==========\n", mode.mode);
write("abcdefg", PATH1, mode.mode, mode.isRead);
read(PATH1);
printf("-----------------\n");
write("123", PATH1, mode.mode, mode.isRead);
read(PATH1);
printf("\n");
write("", PATH1, "w", 0);
}
return 0;
}
void write(const char *content, const char *path, const char *mode, int isRead) {
FILE *file = fopen(path, mode);
if (file == NULL) {
return;
}
fputs(content, file);
//是否读文件
if (isRead == 1) {
//指针偏移到文件首
fseek(file, 0, SEEK_SET);
char str[50];
fgets(str, 50, file);
printf("[%-3s read] %s\n", mode, str);
}
fclose(file);
}
//读取文件内容
void read(const char *path) {
FILE *file = fopen(path, "r");
if (file == NULL) {
return;
}
char str[50];
fgets(str, 50, file);
printf("[%-3s read] %s\n", "r", str);
fclose(file);
}
运行结果
=========r+ write==========
[r+ read] abcdefg
[r read] abcdefg
-----------------
[r+ read] 123defg
[r read] 123defg
=========w write==========
[r read] abcdefg
-----------------
[r read] 123
=========w+ write==========
[w+ read] abcdefg
[r read] abcdefg
-----------------
[w+ read] 123
[r read] 123
=========a write==========
[r read] abcdefg
-----------------
[r read] abcdefg123
=========a+ write==========
[a+ read] abcdefg
[r read] abcdefg
-----------------
[a+ read] abcdefg123
[r read] abcdefg123