当我们在电脑上打开安装软件的那个文件夹我们就会发现,它除了可执行程序之外还有好多其他文件,而这也就是为什么这些软件可以保存你的使用数据而我们自己写的程序却无法保存数据。这篇文章就将会为我们介绍如何用C语言来对文件进行操控。
文件分为程序文件和数据文件而我们主要是对数据文件进行操作。
使用文件我们可以将数据直接存放在电脑的硬盘上,做到了数据的持久化。而要使用文件就必须先将文件打开。下面就是我们的第一个函数fopen。
fopen
FILE * fopen ( const char * filename, const char * mode );
这个函数的作用就是以我们指定的模式来打开指定的的文件。
返回值是一个指向该文件信息区的指针,可以简单将其理解为指向该文件的指针。
filename:第一个参数需要我们传文件的地址和名字(包含文件后缀);
可以传相对位置
intmain() { //这里的"data.txt"表示的是在当前程序所在的文件夹里面寻找名为data后缀为.txt的文件FILE*p=fopen("data.txt", "r"); //这里的"..\\data.txt"表示的是在当前程序所在的文件夹的上一级文件夹里面寻找名为data后缀为.txt的文件;..\\表示上一级文件夹.\\表示当前文件夹FILE*pf=fopen("..\\data.txt", "r"); fcloce(p); fcloce(pf); p=NULL; pf=NULL; return0; }
也可以传绝对位置
FILE*p=fopen("D:\\c&cpp\\c\\data.txt", "w"); fclose(p); p=NULL;
mode:第二个参数需要我们传我们需要这个文件以什么方式打开。
文件使用方式 | 含义 | 如果指定文件不存在 |
“r”(只读) | 为了输入数据,打开一个已经存在的文本文件 | 出错 |
“w”(只写) | 为了输出数据,打开一个文本文件 | 建立一个新的文件 |
“a”(追加) | 向文本文件尾添加数据 | 建立一个新的文件 |
“rb”(只读) | 为了输入数据,打开一个二进制文件 | 出错 |
“wb”(只写) | 为了输出数据,打开一个二进制文件 | 建立一个新的文件 |
“ab”(追加) | 向一个二进制文件尾添加数据 | 建立一个新的文件 |
“r+”(读写) | 为了读和写,打开一个文本文件 | 出错 |
“w+”(读写) | 为了读和写,建立一个新的文件 | 建立一个新的文件 |
“a+”(读写) | 打开一个文件 | 在文件尾进行读写 建立一个新的文件 |
“rb+”(读写) | 为了读和写打开一个二进制文件 | 出错 |
“wb+”(读写) | 为了读和写,新建一个新的二进制文件 | 建立一个新的文件 |
“ab+”(读写) | 打开一个二进制文件,在文件尾进行读和写 | 建立一个新的文件 |
现在我们已经了解了打开文件,它其实也和动态内存开辟一样我们打开的文件在我们用完了之后一定要将它关闭并将文件指针变量置空,防止其变为野指针而为我们的程序留下隐患 。下面就为大家介绍文件关闭函数:fclose
fclose
int fclose ( FILE * stream );
它的功能就是关闭已打开的文件。
stream:是一个文件指针变量
返回值:如果成功关闭返回0;失败返回EOF
如果我们想对文件进行读写操作就需要fgetc , fputc。
对文件进行读写操作
fgetc
int fgetc ( FILE * stream );
这是一个读文件的函数它是从指定文件中读取一个字符返回它的ASCII码值,如果读取失败就返回EOF。
fputc
int fputc ( int character, FILE * stream );
函数功能是将一个字符写入文件。
character:需要写入字符的ASCII码;
stream:待写入字符的文件的文件指针;
如果写入失败就返回EOF。
其他的一些输入输出函数
功能 | 函数名 | 适用于 |
字符输入函数 | fgetc | 所有输入流 |
字符输出函数 | fputc | 所有输出流 |
文本行输入函数 | fgets | 所有输入流 |
文本行输出函数 | fputs | 所有输出流 |
格式化输入函数 | fscanf | 所有输入流 |
格式化输出函数 | fprintf | 所有输出流 |
二进制输入 | fread | 文件 |
二进制输出 | fwrite | 文件 |