一、文件包括:程序文件和数据文件
程序文件包括源程序⽂件(后缀为.c),⽬标⽂件(windows环境后缀为.obj),可执⾏程序(windows 环境后缀为.exe)。
文件的内容不⼀定是程序,⽽是程序运⾏时读写的数据,⽐如程序运⾏需要从中读取数据的⽂件,或 者输出内容的⽂件。
1、文件名
文件名由文件路径、文件名主干、文件后缀三部分组成。
例如: c:\code\test.txt。
2、二进制文件
数据在内存中以二进制形式存储,不加转换的输出到外存文件中的文件。
二、流和标准流
1、流
我们程序的数据需要输出到各种外部设备,也需要从外部设备获取数据,不同的外部设备的输⼊输出 操作各不相同,为了⽅便程序员对各种设备进行方便的操作,我们抽象出了流的概念,我们可以把流 想象成流淌着字符的河。
C程序针对⽂件、画⾯、键盘等的数据输⼊输出操作都是通过流操作的。 ⼀般情况下,我们要想向流⾥写数据,或者从流中读取数据,都是要打开流,然后操作。
2、标准流
• stdin标准输⼊流,在⼤多数的环境中从键盘输⼊,scanf函数就是从标准输⼊流中读取数据。
• stdout标准输出流,⼤多数的环境中输出⾄显示器界⾯,printf函数就是将信息输出到标准输出 流中。
• stderr标准错误流,⼤多数环境中输出到显示器界⾯。
这是默认打开了这三个流,我们使⽤scanf、printf等函数就可以直接进⾏输⼊输出操作的。
stdin、stdout、stderr三个流的类型是: FILE* ,通常称为⽂件指针。
C语⾔中,就是通过 FILE* 的⽂件指针来维护流的各种操作的。
三、文件的打开和关闭
ANSIC规定使⽤ fopen 函数来打开⽂件, fclose 来关闭⽂件。
//打开⽂件
FILE * fopen ( const char * filename, const char * mode );
//关闭⽂件
int fclose ( FILE * stream );
mode是文件打开模式。
下面整理了一些文件打开模式:
举个例子:
/* fopen fclose example */
#include <stdio.h>
int main ()
{
FILE * pFile;
//打开⽂件
pFile = fopen ("myfile.txt","w");
//⽂件操作
if (pFile!=NULL)
{
fputs ("fopen example",pFile);
//关闭⽂件
fclose (pFile);
}
return 0;
}
这里通过 “ w ” 读一个文件 “ myfile.txt ”,然后将其内容输入到 “ fopen example” 。注意一定要判断空指针。
四、文件的顺序读写
1、顺序读写函数
上面代码中的 fputs 其实是一种顺序读写函数。
这里强调一下,关闭文件后一定要把指针置为空。
这里简单举一个例子:
将test.txt文件中的字符串打印出来。
2、fscanf、sscanf、fprintf、sprintf
fscanf:从指定的输入流上读取格式化的数据。
sscanf:在字符串中读取格式化的数据。
fprintf:把数据以格式化的形式打印在指定的输出流上。
sprinf:把格式化的数据转化成字符串。
五、feof
feof经常被错误使用。
要铭记feof的作用:当文件读取结束的时候,判断是读取结束的原因是否是:遇到文件尾结束。