目录
一、文件的打开与关闭
1.在读写文件前应该先打开文件,在使用结束之后应该关闭文件;
注:ANSIC规定:fopen函数用来打开文件,fcolse函数用来关闭函数;
2.文件的打开与读写中常用的打开方式有:
r:只读方式打开文件,文件必须存在。
w:只写方式打开文件,如果文件不存在则创建文件,如果文件存在则清空文件。
a:追加方式打开文件,如果文件不存在则创建文件,如果文件存在则在文件末尾添加数据。
r+:读写方式打开文件,文件必须存在。
w+:读写方式打开文件,如果文件不存在则创建文件,如果文件存在则清空文件。
a+:读写方式打开文件,如果文件不存在则创建文件,如果文件存在则在文件末尾添加数据。
rb:以二进制方式只读方式打开文件,文件必须存在。
wb:以二进制方式只写方式打开文件,如果文件不存在则创建文件,如果文件存在则清空文件。
ab:以二进制方式追加方式打开文件,如果文件不存在则创建文件,如果文件存在则在文件末尾添加数据。
rb+:以二进制方式读写方式打开文件,文件必须存在。
wb+:以二进制方式读写方式打开文件,如果文件不存在则创建文件,如果文件存在则清空文件。
ab+:以二进制方式读写方式打开文件,如果文件不存在则创建文件,如果文件存在则在文件末尾添加数据。
rt:以文本方式只读方式打开文件,文件必须存在。
wt:以文本方式只写方式打开文件,如果文件不存在则创建文件,如果文件存在则清空文件。
3.代码样例:(展示了‘w'和’r'两种方式)
#include <stdio.h>
int main()
{
FILE *fp;
char str[100];
fp = fopen("test.txt", "r");//打开文件并换到只读模式
if (fp == NULL)
{
printf("文件打开失败\n");
return 0;
}
fread(str, sizeof(char), 100, fp);
printf("%s", str);
fclose(fp);//记得每次打开文件后要关闭文件,防止内存泄漏
}
#include <stdio.h>
int main()
{
FILE *fp;
char str[100];
fp = fopen("test.txt", "w");//打开文件并换到只写模式
if (fp == NULL)
{
printf("文件打开失败\n");
return 0;
}
fwrite(str, sizeof(char), 100, fp);
fclose(fp);//记得每次打开文件后要关闭文件,防止内存泄漏
}
二、文件的顺序读取
1.常见的文件顺序读取的函数有:
fread():从文件中读取数据。(二进制输入)
fwrite():向文件中写入数据。(二进制输出)
feof():检查文件是否到达末尾。
ferror():检查文件是否发生错误。
clearerr():清除文件错误标志。
fgetc():从文件中读取一个字符。
fputc():向文件中写入一个字符。
fgets():从文件中读取一行字符串。
fputs():向文件中写入一行字符串。
fprintf():向文件中格式化输出数据。
fscanf():从文件中格式化输入数据。
2.文件顺序读取方式总结:
1、字符输入输出函数,针对的是一个字符;
2、文本行输入输出函数,针对的是一行文本,遇到'\n'就停止输入输出;
3、格式化输入输出:是按照一定格式进行输入输出的(例如:整型——%d、字符——%c、字符串%s);
3.代码样例
#include <stdio.h>
int main() {
// 使用 fgetc() 从文件中读取一个字符
FILE *file = fopen("test.txt", "r");
if (file == NULL) {
perror("无法打开文件");
return 1;
}
int ch = fgetc(file);
if (ch == EOF) {
perror("读取文件失败");
} else {
printf("读取的字符是:%c\n", ch);
}
fclose(file);
// 使用 fputc() 向文件中写入一个字符
file = fopen("test.txt", "w");
if (file == NULL) {
perror("无法打开文件");
return 1;
}
fputc('A', file);
fclose(file);
// 使用 fgets() 从文件中读取一行字符串
file = fopen("test.txt", "r");
if (file == NULL) {
perror("无法打开文件");
return 1;
}
char buffer[100];
fgets(buffer, sizeof(buffer), file);
printf("读取的字符串是:%s\n", buffer);
fclose(file);
// 使用 fputs() 向文件中写入一行字符串
file = fopen("test.txt", "w");
if (file == NULL) {
perror("无法打开文件");
return 1;
}
fputs("Hello, World!", file);
fclose(file);
// 使用 fprintf() 向文件中格式化输出数据
file = fopen("test.txt", "w");
if (file == NULL) {
perror("无法打开文件");
return 1;
}
fprintf(file, "姓名:%s,年龄:%d\n", "Tom", 30);
fclose(file);
// 使用 fscanf() 从文件中格式化输入数据
file = fopen("test.txt", "r");
if (file == NULL) {
perror("无法打开文件");
return 1;
}
char name[100];
int age;
fscanf(file, "姓名:%s,年龄:%d", name, &age);
printf("姓名:%s,年龄:%d\n", name, age);
fclose(file);
return 0;
}
三、文件的随机读写
文件的随机读写是根据文件指针的位置和偏移量来定位文件指针;fseek是读文件,可以从三个不同的位置进行读(SEEK_SET,SEEK_CUR,SEEK_END);
1.文件的随机读写用到的函数
fseek():设置文件指针的位置。
ftell():获取文件指针的当前位置。
rewind():将文件指针重置到文件开头。
2.代码样例:
#include <stdio.h>
int main() {
FILE *file = fopen("test.txt", "r");
if (file == NULL) {
perror("无法打开文件");
return 1;
}
// 使用 fseek() 设置文件指针的位置
fseek(file, 10, SEEK_SET);
// 使用 ftell() 获取文件指针的当前位置
long pos = ftell(file);
printf("当前文件指针位置:%ld\n", pos);
// 使用 rewind() 将文件指针重置到文件开头
rewind(file);
// 读取文件的第一个字符
int ch = fgetc(file);
printf("文件的第一个字符是:%c\n", ch);
fclose(file);
return 0;
}