立即学习:https://edu.csdn.net/course/play/8088/178714?utm_source=blogtoedu
1. 文件的打开
文件在读或者写之前,我们必须要打开,在读或者写结束之后,我们必须要关闭,否则会造成资源泄露;
文件的打开使用fopen函数,调用方式如下:
FILE *fp; //FILE是个结构,fp是指向结构FILE的指针变量
fp = fopen(文件名,使用文件的方式); //
例如:fp = fopen(“text1.txt”,”r”); //打开text1文件,使用的方式为只读;
fopen()这个函数返回一个指向text1文件的指针,这个指针被赋值给了fp。我们可以认为fp指向了text1文件。
FILE结构的意义:保存很多和文件有关的信息,如文件名,文件打开方式,当前文件位置等;
fopen()函数有可能执行失败,比如文件不存在,他就会执行失败,这个时候fopen()会返回一个空
打开方式表:
2. 文件的关闭
文件只有在成功被fopen打开之后,才存在文件关闭的问题
为什么要关闭文件:
(1)释放这个文件占用的内存资源,如果很多资源都用了不释放,那么最后内存资源耗尽就会导致程序崩溃
(2)我们往文件里写数据时不会立即往磁盘上写,系统会把数据写到一个叫“缓冲区”这么一个地方,缓冲区满时系统才往磁盘文件上写,写完之后把缓冲区清空继续等待用户往文件中写数据。如果缓冲区数据没有满却退出了程序,那么缓冲区的数据就没来得及写到磁盘文件上,造成数据丢失。关闭文件这个动作会触发系统把缓冲区中的数据立即写到磁盘上,这就避免了缓冲区中的数据丢失的问题。
文件关闭函数的一般形式:
fclose(文件指针);
如:
if(fp != NULL)
fclose(fp); //fp就是fopen()的返回值
3. 文件的读写
(1)fputc函数
fputc():把一个字符写到磁盘文件上去,一般形式为:
fputc(ch,fp); //ch是这个字符,可以是一个字符常量,也可以是一个字符变量。fp是fopen返回的那个文件指针。将字符输出到fp所指向的文件上去;
如果fputc失败,则返回EOF,如果输出成功,则返回值就是输出的字符的ascii码值
EOF(End Of file):是个符号常量,其实他代表-1
fp = fopen("FTest.txt","w");//可以自己指定文件路径,如fp = fopen("E:\\C语言学习\\text1.txt","w");若不指定,则默认为工程的solution1\project1目录下
if(fp == NULL)
{
printf("文件打开失败");
}
else
{
//文件打开成功才走这里
char reco = fputc('a',fp);
if(reco == EOF)
{
//写失败
//....
}
reco = fputc('d',fp);
reco = fputc('e',fp);
fclose(fp);
}
(2)fgetc函数
fgetc:从指定文件读入一个字符;
调用形式为: char reco = fgetc(fp);
如果执行成功,返回读入的字符;如果读入失败或者整个文件读到末尾了,则返回EOF;
fp = fopen("FTest.txt","r"); //文件刚打开,文件指针指向开头
if(fp == NULL)
{
printf("文件打开失败");
}
else
{
//文件打开成功才走这里
char reco = fgetc(fp); //每读一个字符,文件指针自动向下走一个字符
while(reco != EOF) //读入失败或者到文件结束这个条件都成立。
{
putchar(reco); //屏幕上输出一个字符
reco = fgetc(fp);
}
fclose(fp);
}
(3)feof函数
我们是用EOF来判断读入的内容是否到文件结束;现在fopen打开文件的方式是文本方式,如果我们将来以二进制格式打开文件,二进制数据里可能会存在-1这种数据,这个就跟EOF冲突了;这说明我们通过和EOF比较来判断文件是否结束不合适,因此引入函数feof
一般形式:feof(fp);
用来判断文件是否结束,如果文件结束的话,feof(fp);返回1(真),如果文件没结束,feof(fp)返回0(假),不管是以二进制形式打开文件还是以文本形式打开文件,feof()函数都适用;
文件操作函数表: