目录
二、文件的顺序读写
-----------------------------------------------
一、文件的打开和关闭
1.文件指针
每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名 字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是有系统 声明的,取名为FILE.
例如: FILE* pf;
定义pf是一个指向FILE类型数据的指针变量。可以使pf指向某个文件的文件信息区(是一个结构体变量)。通过该文件信息区中的信息就能够访问该文件。也就是说,通过文件指针变量能够找到与它关联的文件。
2.fopen和fclose
2.1 fopen
文件在读写之前应该先打开文件,在使用结束之后应该关闭文件。
fopen是打开文件的函数,fclose是关闭文件的函数
在打开文件的同时,都会返回一个FILE*的指针变量指向该文件
文件的打开方式有很多,例如:
2.2 fclose
文件在操作完之后,必须要关闭文件
FILE* stream 为要关闭的文件的文件指针
代码示例:
#include<stdio.h>
#include<string.h>
#include<errno.h>
int main()
{
FILE* pf = fopen("test.txt", "r");//"r"是以只读的方式打开文件
if (pf == NULL)//判断文件打开是否成功
{
printf("%s\n", strerror(errno));
return 1;
}
fclose(pf);
pf = NULL;
return 0;
二、文件的顺序读写
接下来将一一介绍这些函数
1.字符输出函数(fputc)和字符输入函数(fgets)
1.1字符输出函数 fputc
使用示例:
int main()
{
FILE* pf = fopen("test.txt", "w");//"w"是以写的方式打开文件
if (pf == NULL)
{
printf("%s", strerror(errno));
return 1;
}
//写入'a'
fputc('a', pf);
//关闭文件
fclose(pf);
pf = NULL;
return 0;
}
1.2 字符输入函数 fgetc
如果读取失败则返回EOF
使用示例:(文件中已放入了 ‘a’ )
---------------------------------------------------------------------------------------------------------
2.文本行输入(fgets)、输出(fputs)函数
2.1 文本行输出函数 fputs
使用示例:
int main()
{
FILE* pf = fopen("test.txt", "w");//"w"是以写的方式打开文件
if (pf == NULL)
{
printf("%s", strerror(errno));
return 1;
}
//写入
fputs("abcdef", pf);
//关闭文件
fclose(pf);
pf = NULL;
return 0;
}
运行结果如下:
2.2 文本行输入函数 fgets
从文件中读取一行数据
从文件中读取num个字符,将其地址放在str中并返回
如果读取失败则返回NULL
注意:num = 实际读取的字符个数 + ' \0 '
使用示例:
首先文件中已经放入了 abcdef
int main()
{
FILE* pf = fopen("test.txt", "r");//以读的方式打开文件
if (pf == NULL)
{
printf("%s\n", strerror(errno));
return 1;
}
//读取一行数据
char arr[10] = { 0 };
fgets(arr, 5, pf);//从文件中读取5个字符放入arr中
printf("%s\n", arr);
//关闭文件
fclose(pf);
pf = NULL;
return 0;
}
结果为
--------------------------------------------------------
3.格式化输入(fscanf)与格式化输出(fprintf)函数
3.1 格式化输出函数 fprintf
使用示例:
int main()
{
char name[10] = "zhangsan";
int age = 18;
float high = 1.75f;
FILE* pf = fopen("test.txt", "w");//以写的方式打开文件
if (pf == NULL)
{
perror("fopen");
return 1;
}
//格式化写入信息
fprintf(pf, "%s %d %.2f", name, age, high);
//关闭文件
fclose(pf);
pf = NULL;
return 0;
}
结果为:
3.2 格式化输入函数 fscanf
使用示例:
int main()
{
char name[10] = { 0 };
int age;
float high;
FILE* pf = fopen("test.txt", "r");//以读的方式打开文件
if (pf == NULL)
{
perror("fopen");
return 1;
}
//格式化读取信息
fscanf(pf, "%s %d %f", name, &age, &high);
printf("%s %d %.2f", name, age, high);
//关闭文件
fclose(pf);
pf = NULL;
return 0;
}
4.二进制输入(fread)与输出(fwrite)
4.1 二进制输出 fwrite
使用示例:
int main()
{
int age=67;
FILE* pf = fopen("test.txt", "wb");//以二进制写入打开文件
if (pf == NULL)
{
perror(fopen);
return 1;
}
//二进制写入
fwrite(&age, sizeof(age), 1, pf);
//关闭文件
fclose(pf);
pf = NULL;
return 0;
}
结果为:
以二进制写入,所以看不懂
4.2 二进制输入 fread
返回值为成功读取到数据的个数,如果返回值与 count 不同,则表示读取错误或读取到达文件末尾
使用示例:
int main()
{
int age = 0;
FILE* pf = fopen("test.txt", "rb");//以二进制读打开文件
if (pf == NULL)
{
perror(fopen);
return 1;
}
//以二进制读文件
fread(&age, sizeof(age), 1, pf);
printf("%d\n", age);
fclose(pf);
pf = NULL;
return 0;
}
结果为:(文件之前以二进制形式写入了 67 )