目录
C语言中有时要用到文件,那么如何用C语言来操作文件呢?
1、流的概念
我们程序的数据需要输出到外部设备上,也需要从外部设备输入到我们的C语言程序上,为了方便操作,我们抽象出了流的概念(到这里虽然你不理解,其实我也不理解,只需要记住流这个专业名词就好)。
一般情况下,我们要输入数据要先打开流,输入结束后要关闭流,文件操作也要打开文件,操作结束后关闭文件。
那为什么我们平时输入数据时没有打开对应的流呢?
其实C程序在我们开始写程序时就已经提前打开3个流了
stdin-标准输入流,大多数环境下从键盘上输入数据,scanf就是在标准输入流中读取数据;
stdout-标准输出流,大多数环境下在屏幕上输出数据,printf就是在标准输出流中输出数据;
stderr-标准错误流,大多数环境下在屏幕上输出数据;
stdin,stdout和stderr这三个流的类型就是FILE*,通常称为文件指针
C语言操作文件就是通过文件指针来打开和关闭文件的,进行一系列的文件操作;
2、文件的打开和关闭
我们在打开文件时会返回一个FILE*的指针,需要用一个FILE*类型的变量接收它;
ANSIC 规定使⽤ fopen 函数来打开⽂件, fclose 来关闭⽂件;
//打开文件
FILE*pf=fopen("const char *filename","const char *mode");
//关闭文件
fclose(pf);
pf=NULL;
filename 指的是文件名字,mode指的是打开模式
例如:
int main()
{
//打开文件
FILE*pf=fopen("data.txt","w");
if(pf==NULL)
{
perror("pf");
return -1;
}
//关闭文件
fclose(pf);
pf=NULL;
return 0;
}
3、关于文件操作的函数
1、顺序读写介绍
fgetc
fgetc是从文件中读入一个字符,用只读的方式打开,返回值是int类型;
fputc
fputc是向文件中写入一个字符,用只写的方式打开文件
fgets
fgets是从文件中读入一串字符,用只读的方式打开;
fgets有三个参数,第一个是char *的指针,第二个是读入的字符个数,第三个是文件指针;
举个例子,fgets就是在p1指向的文件中读入至多4个字符,放入arr中;
为什么是至多四个字符,fgets函数规定的是读入num-1个字符,如果文件中不足num-1个字符,那么就有多少读多少,如果文件中足够num-1个字符,就读入num-1个字符;
<