程序不能长期地存储数据,如果定义一个整型变量,把12赋给它,然后关闭计算机,变量中就不再有12了!所以,必须把数据保存到硬盘上,一旦数据在硬盘上了,它将一直在那里,直到你修改或删除了它。
硬盘把数据存放在文件(File)中。文件可以存放程序或者数据,程序运行之前必须从硬盘装载到内存中,在数据进入硬盘之前,变量也存放着数据。
有两种类型的文件:顺序访问(sequential-access)和随机访问(random-access)。他们的类型决定了你可以怎样访问他们。如果处理一个顺序访问文件,那么你得按照数据的顺序读或写文件。在随机访问的文件中,你可以跳跃式地读或写文件的任何位置。
所有的硬盘文件都有名字,这些名字遵循与程序名字相同的命名规则。无论是创建、读或修改文件中的数据,在能够使用硬盘文件之前,你必须打开文件。计算机把一个叫做文件指针(File pointer)东西关联到文件上并确保合理地设置硬盘以存放指定的文件。
如何打开顺序文件。先使用fopen()函数,他的描述与printf()的描述一起包含在STDIO.H中。文件指针是存放着正在处理的硬盘文件的硬盘地址。你必须使用一条特殊的语句来定义文件指针。与任何变量一样,可以把文件指针按你喜欢的方式命名。假设你想打开一个雇员文件。在fopen()前面,你必须定义一个文件指针变量。如果文件指针变量命名为fptr,则文件指针定义为:
FILE*fptr;
一旦定义了文件指针,就可以用fopen()把指针连接到某个文件。一旦指定了fopen(),你就可以在程序的其他部分使用此文件了。下面是打开名为C:\EMPS.DAT的文件的方法。
#include<stdio.h>
FILE *fptr;
main()
{ fptr=fopen("C:\\EMPS.DAT","w");
fclose(fptr);
}
在程序的其他部分中,你将通过文件指针访问EMPS.DAT文件,而不是通过文件名访问。在 每次访问文件时,使用文件指针变量比输入文件名和文件完全路径更简单,而且更不容易出错。
在使用完文件后,要关闭所有打开的文件,否则将丢失数据。fclose()与fopen()刚好相反,在他的括号里,fclose()要求写上想要关闭的文件的指针。
访问顺序文件。对顺序文件能做三件事——创建、读、写。为了写文件,你可以使用fprintf()。fprintf()很容易使用,因为它只不过是在括号开始处带有文件指针的printf()。下面的程序创建一个文件并用fprintf()写入一些数据:
#include<stdio.h>
#include<stdlib.h>
FILE *fptr;
int main()
{
int age=45;
float salary=9670.50;
fptr=fopen("C\\MYDATA.DAT","w");
if(fptr==0)
{printf("An error occurred while opening the file.\n");
exit(1);
}
fprintf(fptr,"Here is some stuff:\n");
fprintf(fptr,"I an %d years old.\n",age);
fprintf(fptr,"I make $%.2f dollars every three month!\n“,salary);
fclose(fptr);
return 0;
}
用fgets()读取文件的内容。fgets()只不过是可以定向到硬盘文件的gets().gets()从文件中读取行到字符数组中。把fputs()和fgets()开头处的f看成file.puts()和gets()分别到达屏幕和键盘,fputs()和fgets()从文件中写和读数据。