文件作用
(1).将数据进行持久化的保存。
文件分类
(1).程序文件:包括源程序文件(后缀为.c)、目标文件(Windows环境后缀为.obj)、可执行程序(windows环境后缀为.exe).
(2).数据文件:程序运行时读写的数据。
数据文件的分类
(1).二进制文件:数据在内存中以二进制存储,再不加转换地输出到外存的空间中。
(2).文本文件:在外存上以ASCLL字符的形式存储
文件的打开和关闭
(1).标准流:
1.标准输入流(stdin).在大多数环境中从键盘输入。
2.标准输出流(stdout).大多数环境中输出至显示器
3.标准错误流(stderr).大多数环境中会显示到显示器的桌面上。
注:以上三个流的类型是FILE*通常称为文件指针。
(2)文件的打开和关闭:
fopen函数来打开,fclose来关闭。
文件的打开模式:
这里以“wb”为例作为演示使用方法。
#include<stdio.h>
int main()
{
int arr[5] ={1,2,3,4,5};
FILE* pf = fopen("data.txt", "wb");
if (pf == NULL)
{
perror("fopen");
return 1;
}
fwrite(arr, sizeof(arr[0]), 5, pf);
fclose(pf);
pf = NULL;
return 0;
}
注:在使用(输入模式)时,在资源库创建一个data.txt。
在使用(阅读模式)时,data.txt内容不能为空。
文件的顺序读写
注:1.对于fgetc函数,如果成功读取字符,返回的是字符ASCLL码值-char。
如果遇到文件末尾,或者读取失败的时候,返回EOF(-1)。
2.对于fgets函数,如果读取正常,返回的是存储读取到的字符串的字符串字符数组的地址。
如果读取的过程中遇到文件末尾,或者发生错误,返回NULL。
接下来以fgetc函数为例:
#include<stdio.h>
int main()
{
FILE* pf = fopen("data.txt", "r");
if (pf == NULL)
{
perror("fopen");
return 1;
}
int ch = 0;
while ((ch=fgetc(pf))!=EOF)
文件的随机读写
(1).fseek
int fseek(FILE*stream,long int offset,int origin);
SEEK_SET 文件的起始位置。
SEEK_CUR 文件指针的当时位置。
SEEK_END 文件末尾。
(2).ftell(返回文件相当于起始位置的偏移量)
long int ftell(FILE* stream)
(3).rewind 标准形式:void rewind(Filestream)
void rewind(FILE stream)
实例:
#include<stdio.h>
int main()
{
FILE* pf = fopen(“test.txt”, “r”);
if (pf == NULL)
{
perror(“fopen”);
return 1;
}
int ch = fgetc(pf);
printf(“%c\n”, ch);
fseek(pf, 4, SEEK_CUR);
ch = fgetc(pf);
printf(“%c\n”, ch);
printf(“%d\n”, ftell(pf));
rewind(pf);
ch = fgetc(pf);
printf(“%c\n”, ch);
fclose(pf);
pf = NULL;
return 0;
}
运行结果为
文件读取的判断
feof
作用:在读取文件结束时,判断读取结束的原因是否是:遇到文件尾结束。
注:在文件读取过程中,不能用feof函数的返回值直接来判断文件的是否结束。
判断文件读取是否结束,判断返回值是否为EOF(fgetc),或者NULL(fgets)
例如:
1.fgetc
2.fgets(这俩种详情参照上文)
判断二进制文件读取结束判断,返回值是否要小于实际要读的个数。
例如:
fread
文件缓冲区
其功效:操作程序执行会更加高效。