在 C 语言中,文件操作是通过标准库函数(如 fopen
、fclose
、fprintf
等)来完成的。fopen
函数用于打开文件,它的第二个参数是一个字符串,指定了文件的打开模式。常见的模式包括 "w"
、"a"
、"r"
等,每种模式有不同的用途和行为。
1. "r"
:只读模式(Read)
-
作用: 打开文件用于读取。
-
特点:
- 文件必须存在,否则
fopen
会返回NULL
。 - 不能写入文件。
- 文件必须存在,否则
-
示例:
cppFILE *file = fopen("example.txt", "r"); if (file == NULL) { printf("文件打开失败!\\\\n"); return 1; }
2. "w"
:只写模式(Write)
-
作用: 打开文件用于写入。
-
特点:
- 如果文件存在,内容会被清空(覆盖)。
- 如果文件不存在,会创建一个新文件。
- 不能读取文件。
-
示例:
cppFILE *file = fopen("example.txt", "w"); if (file == NULL) { printf("文件打开失败!\\\\n"); return 1; } fprintf(file, "Hello, World!\\\\n"); fclose(file);
3. "a"
:追加模式(Append)
-
作用: 打开文件用于追加写入。
-
特点:
- 如果文件存在,写入的数据会追加到文件末尾。
- 如果文件不存在,会创建一个新文件。
- 不能读取文件。
-
示例:
cppFILE *file = fopen("example.txt", "a"); if (file == NULL) { printf("文件打开失败!\\\\n"); return 1; } fprintf(file, "This is appended text.\\\\n"); fclose(file);
4. "r+"
:读写模式(Read and Write)
-
作用: 打开文件用于读取和写入。
-
特点:
- 文件必须存在,否则
fopen
会返回NULL
。 - 写入数据时会从文件开头覆盖原有内容。
- 可以通过
fseek
调整文件指针的位置。
- 文件必须存在,否则
-
示例:
cppFILE *file = fopen("example.txt", "r+"); if (file == NULL) { printf("文件打开失败!\\\\n"); return 1; } fseek(file, 0, SEEK_END); // 将文件指针移动到末尾 fprintf(file, "This is added text.\\\\n"); fclose(file);
5. "w+"
:读写模式(Write and Read)
-
作用: 打开文件用于读取和写入。
-
特点:
- 如果文件存在,内容会被清空(覆盖)。
- 如果文件不存在,会创建一个新文件。
- 可以通过
fseek
调整文件指针的位置。
-
示例:
cppFILE *file = fopen("example.txt", "w+"); if (file == NULL) { printf("文件打开失败!\\\\n"); return 1; } fprintf(file, "This is new content.\\\\n"); fseek(file, 0, SEEK_SET); // 将文件指针移动到开头 char buffer[100]; fgets(buffer, 100, file); // 读取文件内容 printf("File content: %s", buffer); fclose(file);
6. "a+"
:追加读写模式(Append and Read)
-
作用: 打开文件用于追加写入和读取。
-
特点:
- 如果文件存在,写入的数据会追加到文件末尾。
- 如果文件不存在,会创建一个新文件。
- 读取操作可以从文件开头开始,但写入操作只能在文件末尾进行。
-
示例:
cppFILE *file = fopen("example.txt", "a+"); if (file == NULL) { printf("文件打开失败!\\\\n"); return 1; } fprintf(file, "This is appended text.\\\\n"); fseek(file, 0, SEEK_SET); // 将文件指针移动到开头 char buffer[100]; fgets(buffer, 100, file); // 读取文件内容 printf("File content: %s", buffer); fclose(file);
7. 二进制模式
在模式字符串中添加 "b"
可以以二进制模式打开文件(例如 "rb"
、"wb"
、"ab"
等)。二进制模式与文本模式的区别在于:
- 文本模式:会对换行符进行特殊处理(例如 Windows 中将
\n
转换为\r\n
)。 - 二进制模式:直接读写原始数据,不做任何转换。
8. 总结
|--------|------------------------|
| 模式 | 描述 |
| "r"
| 只读模式,文件必须存在。 |
| "w"
| 只写模式,文件存在则清空,不存在则创建。 |
| "a"
| 追加模式,文件存在则追加,不存在则创建。 |
| "r+"
| 读写模式,文件必须存在。 |
| "w+"
| 读写模式,文件存在则清空,不存在则创建。 |
| "a+"
| 追加读写模式,文件存在则追加,不存在则创建。 |