文件处理(C语言)

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是编译时的运算符,不是函数,不会有产生函数调用开销的。








  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值