这里咱们不写那么细,就复习一下常用的文件操作。分别是文件的打开和关闭,还有读写。
对文件的操作都是由文件指针来完成的,它是一个结构体,保存文件有关的信息。该结构体由系统实现,我们只需要记得使用时写成这样即可:
FILE *fp;
fopen函数用来打开文件。
FILE *fp;
fp = fopen(文件名,使用文件方式);
常用的文件使用方式:
只是文本文件的,二进制文件大家需要自行百度一下。
文件使用方式 | 含义 |
r(只读) | 打开一个文本文件,只允许读数据 |
w(只写) | 打开或建立一个文本文件,只允许写数据 |
a(追加) | 打开一个文本文件,并在文件末尾写数据 |
r+,w+,a+ | 对应功能不变,只是均支持读写操作 |
fclose(文件指针);
这一部分的函数有很多。
(1)fputc()函数和fgetc()函数
ch = fputc(ch,fp);
ch = fgetc(ch,fp);
下面举个例子演示:
首先在D盘下的CFILE文件夹下创建一个test.txt文件
然后是我们的文件的写入程序:
#include
int main()
{
FILE* fp;
char ch;
fp = fopen("D:\\CFILE\\test.txt", "w");//注意从文件夹复制过来的路径只有一个斜杠,我们自己要加一个
if (fp == NULL) {
printf("文件打开失败");
return 0;
}
ch = getchar();
while (ch != '#') {
fputc(ch, fp);
ch = getchar();
}
fclose(fp);
return 0;
}
我们的结果:
就读我们刚刚创建的这个文件。
#include
int main()
{
FILE* fp;
char ch;
fp = fopen("D:\\CFILE\\test.txt", "r");//注意从文件夹复制过来的路径只有一个斜杠,我们自己要加一个
if (fp == NULL) {
printf("文件打开失败");
return 0;
}
ch = fgetc(fp);
while (ch != EOF) {
printf("%c ", ch);
ch = fgetc(fp);
}
fclose(fp);
return 0;
}
运行结果:
(2)fputs()函数和fgets()函数
与fputc()函数和fgetc()函数完全类似,只不过变成了对字符串操作。
fputs(字符串,文件指针);
fgets(字符数组名,n,文件指针);
n是得到的字符串中字符的个数(包含'\0');
(3)fprintf()函数和fscanf()函数
格式输出输入函数,与printf()函数和scanf()函数的区别就是读写对象不同,前者是磁盘文件,后者是终端。
例:它的作用是将整形变量i的值以"%d"的格式输出到fp指向的文件中。
fprintf(文件类型指针,格式字符串,输出列表);
fprintf(fp,"%d",i);
fscanf(文件类型指针,格式字符串,输入列表);
fscanf(fp,"%d",&i);
一个fscanf()函数的例子:
首先在test.txt中写5个字母,一会用程序将他们以整数形式输出。
#include
int main()
{
FILE* fp;
char ch;
fp = fopen("D:\\CFILE\\test.txt", "r");//注意从文件夹复制过来的路径只有一个斜杠,我们自己要加一个
if (fp == NULL) {
printf("文件打开失败");
return 0;
}
char j;
for (int i = 0; i < 5; i++) {
fscanf(fp, "%c", &j);
printf("%d is %5d\n", i + 1, j);
}
fclose(fp);
return 0;
}
(4)fread()函数和fwrite()函数
前面介绍的fpute和fgetc函数,每次只能读写文件中的一个字符,但是在编写程序的过程中往往需要对整块数据进行读写,例如,对一个结构体类型变量值进行读写。下面就介绍实现整块读写功能的fread和fwrite函数。
fread函数的一般形式如下:
fread(buffer,size,count,fp);
该函数的作用是从fp所指的文件中读入count次,每次读size字节,读入的信息存在buffer地址中。fwrite函数的一般形式如下:
fwrite(buffer,size,count,fp);
该函数的作用是将buffer地址开始的信息输出count次,每次写size字节到fp所指的文件中。
例如:fread(a,2,3,fp);其含义是从p所指的文件中每次读两个字节送入实数组a中,连续读3次。fwrite(a,2,3,fp);其含义是将a数组中的信息每次输出两个字节到fp所指向的文件中,连续输出3次。
学生信息管理系统
#include
typedef struct student {
char name[30];
char age[10];
char phone[15];
}student;
student stu[100];
int main()
{
FILE* fp;
char ch;
fp = fopen("D:\\CFILE\\test.txt", "w");//注意从文件夹复制过来的路径只有一个斜杠,我们自己要加一个
if (fp == NULL) {
printf("文件打开失败");
return 0;
}
printf("请问有多少学生?");
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
printf("请输入第%d位学生的姓名,年龄,电话号码:\n", i + 1);
scanf("%s%s%s", stu[i].name, stu[i].age, stu[i].phone);
fwrite(&stu[i], sizeof(student), 1, fp);
}
fclose(fp);
return 0;
}