0.注意
(1)记得" "内填 \ \ 两个 “\” ,如果example.txt和.cpp在一个文件夹直接用即可。
(2)标准库函数:fgets
是 C 标准库中的一个函数,定义在 stdio.h
头文件中。其声明如下:
char *fgets(char *str, int n, FILE *stream);
char *str
: 用于存储读取内容的缓冲区(即字符数组)。如果读取成功,fgets
会将字符存入该数组。int n
: 最大读取字符数。它表示最多可以读取n-1
个字符(因为要留出一个字符的位置给\0
,即字符串的终止符)。FILE *stream
: 指向文件或输入流的指针。通常是通过fopen
打开的文件,或者是标准输入流stdin
。
(3)SEEK_SET
和 SEEK_END
这两个常量是由 C 语言标准库 提供的,定义在 <stdio.h>
头文件中,专门用于 fseek
函数中的 whence
参数。它们是用来指定文件指针(FILE *
)相对于哪个位置进行偏移的常量。
SEEK_SET
:文件指针相对于文件的开头位置移动。SEEK_END
:文件指针相对于文件的末尾位置移动。SEEK_CUR
:文件指针相对于当前位置移动。
(4)关于EOF,ch = fgetc(file)) != EOF
是正确的写法,而不能将 EOF
替换为 NULL
。
EOF
用于表示文件结束或读取错误,适用于文件流读取的场景。NULL
用于表示指针为空,不适用于fgetc
的返回值判断。- 在判断
fgetc
结果时,必须使用EOF
来检查是否到达文件末尾,而不能使用NULL
。
1. 打开文件
在 C 语言中,使用 fopen
函数来打开文件。该函数返回一个指向 FILE
类型的指针。
#include <stdio.h>
int main() {
FILE *file;
// 打开文件用于写入,如果文件不存在会创建一个新文件
file = fopen("example.txt", "w");
if (file == NULL) {
printf("无法打开文件\n");
return 1;
}
// 执行文件操作...
fclose(file); // 关闭文件
return 0;
}
2. 写入文件
使用 fprintf
或 fputs
来向文件写入数据。
fscanf
:
fscanf
用于从文件中读取格式化的数据,类似于scanf
。- 它允许你指定格式控制符(例如
%d
、%s
、%f
等),并根据这些格式控制符从文件中提取数据。
fgets
:
fgets
用于从文件中读取一行文本,包括空格和制表符。- 它会读取直到遇到换行符(
\n
)或达到指定的字符数为止。 fgets
读取到的内容会保存在指定的字符数组中,并且会包括换行符(如果有的话),如果读取的字符数达到了最大限制,它会自动终止字符串。
//运行完你就会发现多了三句话了!
#include <stdio.h>
int main() {
FILE *file;
file = fopen("example.txt", "w"); // 打开文件用于写入
if (file == NULL) {
printf("无法打开文件\n");
return 1;
}
// 使用 fprintf 写入格式化数据
fprintf(file, "Hello, World!\n");
fprintf(file, "This is a test file.\n");
// 或者使用 fputs 写入字符串
fputs("Another line of text.\n", file);
fclose(file); // 关闭文件
return 0;
}
3. 读取文件
使用 fscanf
或 fgets
来从文件读取数据。
#include <stdio.h>
int main() {
FILE *file;
char buffer[100];
file = fopen("example.txt", "r"); // 打开文件用于读取
if (file == NULL) {
printf("无法打开文件\n");
return 1;
}
// 使用 fgets 逐行读取文件
while (fgets(buffer, sizeof(buffer), file) != NULL) {
printf("%s", buffer);
}
fclose(file); // 关闭文件
return 0;
}
4. 追加内容到文件
使用 "a"
模式打开文件,可以在文件末尾追加内容。
#include <stdio.h>
int main() {
FILE *file;
file = fopen("example.txt", "a"); // 以追加模式打开文件
if (file == NULL) {
printf("无法打开文件\n");
return 1;
}
fprintf(file, "This line is appended.\n");
fclose(file); // 关闭文件
return 0;
}
5. 文件指针位置操作
使用 fseek
和 ftell
来控制文件指针的位置。
#include <stdio.h>
int main() {
FILE *file;
char buffer[100];
file = fopen("example.txt", "r");
if (file == NULL) {
printf("无法打开文件\n");
return 1;
}
// 定位到文件的末尾
fseek(file, 0, SEEK_END);
long length = ftell(file); // 获取文件大小ftell(file) 返回文件指针当前的位置(即文件末尾的位置)。由于文件指针已经被定位到文件末尾,ftell(file) 返回的是文件的 总字节数,即文件的大小。length 变量用来存储文件大小。
printf("文件大小:%ld 字节\n", length);
// 定位到文件开头
fseek(file, 0, SEEK_SET);
// 读取文件内容
while (fgets(buffer, sizeof(buffer), file) != NULL) {
printf("%s", buffer);
}
fclose(file); // 关闭文件
return 0;
}
6. 文件的错误处理
当进行文件操作时,可能会遇到错误,需要进行错误检查。可以通过 ferror
和 feof
来检查文件读取错误和是否到达文件末尾。
//直接ferror(指针)feof(指针)这样用就行,指针即
FILE *file
#include <stdio.h>
int main() {
FILE *file;
char buffer[100];
file = fopen("example.txt", "r");
if (file == NULL) {
printf("无法打开文件\n");
return 1;
}
while (fgets(buffer, sizeof(buffer), file) != NULL) {
printf("%s", buffer);
}
// 检查文件是否已到达末尾
if (feof(file)) {
printf("\n已到达文件末尾\n");
}
// 检查是否有读取错误
if (ferror(file)) {
printf("读取文件时发生错误\n");
}
fclose(file); // 关闭文件
return 0;
}
7. 删除文件
使用 remove
函数删除文件。
#include <stdio.h>
int main() {
if (remove("example.txt") == 0) {
printf("文件删除成功\n");
} else {
printf("文件删除失败\n");
}
return 0;
}
8.总结
fopen
用于打开文件,fclose
用于关闭文件。fprintf
和fputs
用于写入数据,fscanf
和fgets
用于读取数据。- 使用
fseek
和ftell
来控制文件指针的位置。 - 可以通过检查
feof
和ferror
来判断文件是否读取完毕或发生了错误。