1、C语言把每个文件看成一个有序的字节流,当打开一个文件时,该文件就和某个流关联起来了。
2、程序执行时会自动打开三种文件和与他们关联的三种流:标准输入流/stdin、标准输出流/stdout、标准错误流/stderr。
3、函数feof确定是否到达了文件结尾,参数是一个指向该文件的指针。
feof(stdin): 输入流stdin所指向的文件(应该是存储键盘打入信息的)是否键入了文件结束指示符,如果是,函数为真
如:while(!feof(stdin)) {....;....;scanf("%d",&num); } 如果没有输入结束文件的组合键时,该循环继续。
如:FILE * Ptr; Ptr=fopen(...); while(!feof(Ptr)) {....} 如果Ptr指向的文件没有到结尾,循环继续。
4、fgetc/fputc :从文件中读取/写入一个字符。 // fputc(int x,FILE * x) fputc(100,ptr); 即写入字符d
5、fgets/fputs:从文件中读取/写入一行数据。 //fputs(const char *,FILE *) fputs("\nxiewen",ptr);即另起一行写入字符串xiewen
6、fopen用来打开一个文件(如xxx.txt或xxx.dat文件),并返回一个指向FILE结构的指针。
FILE *ptr;
ptr=fopen("file.txt","参数");
注:有时fopen会出现warning或者error,提醒用fopen_s来代替,解决方法:C/C++->预处理器-》预处理器定义 加上_CRT_SECURE_NO_WARNINGS
参数:
“w”模式:写入数据之前建立一个文件或废弃某个文件的内容,以写入方式打开它。//应该不能读取内容吧
“r”模式:读取某个现有的文件,以读方式打开它。//应该不能写内容吧。不会新建一个文件,必须是现有的
“a”模式:在现有文件的尾部追加记录,以追加方式打开它。 //文件没有会新建一个文件
要打开用于读和写的文件,用如下三种模式:
“w+”模式:建立一个用于读写的文件,如果存在,打开它并废弃当前的内容。//不管是新建或清除内容,都是重新写入新东西的
“r+”模式:以读写方式打开一个供读写的文件。 //打开已有文件,并进行读或写。 不会新建一个文件,必须是现有的
“a+”模式:以读写方式打开一个供读写的文件,所有的写入都追加到文件尾部。 //文件没有会新建一个文件
7、函数fprintf(ptr,"%d",num); 向ptr指向的文件中打印数据
8、函数fscanf(ptr,"%d",num); 从ptr指向的文件中读取数据
9、函数rewind(ptr); 将文件位置指针重新定位到文件起始位置
前面都是顺序存取的,随机存取文件要要求记录数据具有固定的长度。
10、函数fwrite(&num,sizeof(int),1,ptr); 向ptr指向的文件中写入定长sizeof(int)*1的num数据
fwrite(&client,sizeof(struct clientData),1,ptr);
11、函数fseek(ptr,(account-1)*sizeof(struct clientData), SEEK_SET); 将ptr移位到某个位置,即指向新的位置,位移量(offset)就是中间给出的。
SEEK_SET表示位移量相对于文件起始位置。
SEEK_CUR表示位移量相对于文件当前位置。
SEEK_END表示位移量相对于文件尾部位置。
12、函数fwrite(&client,sizeof(struct clientData),1,ptr); 将ptr指向的位置,大小为sizeof(struct clientData)读入client中
易错点:
1、以“w”模式打开一个用户想保留数据的现有文件。这会导致废弃文件的内容,而且不给与任何提示的。
2、用正确的文件指针调用文件处理函数,别用错指针。
3、明确地关闭程序中不再引用的文件。
4、如果不修改文件的内容,就以只读方式打开它。如“r”模式
注:
sizeof是编译时的运算符,不是函数,不会有产生函数调用开销的。