C语言之文件操作

一、C文件的有关基本知识

1、什么是文件

2、文件名

3、文件的分类

4、文件缓冲区

5、文件类型指针

二、打开与关闭文件

1、打开与关闭文件

2、用fopen函数打开数据文件

使用方法:fopen("文件名",文件打开方式“);

3、用fclose函数关闭数据文件

使用方法:fclose(文件指针);

三、顺序读写数据文件

1、怎样向文件读写字符

读写一个字符的函数

例题:从键盘输入一些字符,并逐个把它们送到磁盘上去,直到用户输入一个“#”为止。

 例题:将一个磁盘文件中的信息复制到另一个磁盘文件中。今要求将上例建立的file1.dat文件中的内容复制到另一个磁盘文件file2.dat中。

 读写一个字符串的函数

fgets函数原型: char *fgets(char *str, int n, FILE *fp);

调用方法:fgets(str,n,fp);

        其中,n是要求得到的字符个数,但实际上只从fp所指向的文件中读入n-1个字符,然后在最后加一个′\0′字符,这样得到的字符串共有n个字符,把它们放到字符数组str中。如果在读完n-1个字符之前遇到换行符“\n”或文件结束符EOF,读入即结束,但将所遇到的换行符“\n”也作为一个字符读入。若执行fgets函数成功,则返回值为str数组首元素的地址,如果一开始就遇到文件尾或读数据出错,则返回NULL。

fouts函数原型: int fputs (char *str, FILE *fp);

调用方法:fputs("China",fp)

   把字符串″China″输出到fp指向的文件中。fputs函数中第一个参数可以是字符串常量、字符数组名或字符型指针。字符串末尾的′\0′不输出。若输出成功,函数值为0;失败时,函数值为EOF(即-1)。

        fgets和fputs这两个函数的功能类似于gets和puts函数,只是gets和puts以终端为读写对象,而fgets和fputs函数以指定的文件作为读写对象。

        例题 : 从键盘读入若干个字符串,对它们按字母大小的顺序排序,然后把排好序的字符串送到磁盘文件中保存。

2、向文件读写一个字符串的函数

fgets函数的函数原型为         char *fgets(char *str, int n, FILE *fp);

其作用是从文件读入一个字符串。调用时可以写成下面的形式:

fgets(str,n,fp);

        其中,n是要求得到的字符个数,但实际上只从fp所指向的文件中读入n-1个字符,然后在最后加一个′\0′字符,这样得到的字符串共有n个字符,把它们放到字符数组str中。如果在读完n-1个字符之前遇到换行符“\n”或文件结束符EOF,读入即结束,但将所遇到的换行符“\n”也作为一个字符读入。若执行fgets函数成功,则返回值为str数组首元素的地址,如果一开始就遇到文件尾或读数据出错,则返回NULL。

fputs函数的函数原型为                 int fputs (char *str, FILE *fp);

其作用是将str所指向的字符串输出到fp所指向的文件中。调用时可以写成

fputs("China",fp);

        把字符串″China″输出到fp指向的文件中。fputs函数中第一个参数可以是字符串常量、字符数组名或字符型指针。字符串末尾的′\0′不输出。若输出成功,函数值为0;失败时,函数值为EOF(即-1)。

        fgets和fputs这两个函数的功能类似于gets和puts函数,只是gets和puts以终端为读写对象,而fgets和fputs函数以指定的文件作为读写对象。

注意:fgets是文本行输入函数,从文件中读数据一次只能读一行的数据

3、用格式化的方式读写文本文件 
      

    可以对文件进行格式化输入输出,这时就要用fprintf函数和fscanf函数,从函数名可以看到,它们只是在printf和scanf的前面加了一个字母f。它们的作用与printf函数和scanf函数相仿,都是格式化读写函数。只有一点不同:fprintf和fscanf函数的读写对象不是终端而是文件。它们的一般调用方式为:

                                        fprintf(文件指针, 格式字符串, 输出表列);

                                        fscanf(文件指针, 格式字符串, 输入表列);

fprintf (fp,″%d,%6.2f″,i,f);    //将int型变量i和float型变量f的值按%d和%6.2f的格式输出到fp指向的文件中
 
fscanf (fp,″%d,%f″,&i,&f);
//磁盘文件上如果有字符“3,4.5”,则从中读取整数3送给整型变量i,读取实数4.5送给float型变量f

4、用二进制方式向文件读写一组数据

fread(buffer, size, count, fp);

fwrite(buffer, size, count, fp);

buffer:是一个地址。对fread,它是用来存放从文件读入的数据的存储区的地址。对fwrite,是要把此地址开始的存储区中的数据向文件输出(以上指的是起始地址)。

size:要读写的字节数。

count:要读写多少个数据项(每个数据项长度为size)。

fp:FILE类型指针

四、随机读写数据文件

1、文件位置标记及其定位

2、文件位置标记的定位 

用rewind函数使文件位置标记指向文件开头 rewind函数的作用是使文件位置标记重新返回文件的开头,此函数没有返回值。

        用fseek函数改变文件位置标记,fseek(文件类型指针, 位移量, 起始点);fseek函数一般用于二进制文件。

fseek (fp,100L,0);        //将文件位置标记向前移到离文件开头100个字节处
fseek (fp,50L,1);         //将文件位置标记向前移到离当前位置50个字节处
fseek (fp,-10L,2);        //将文件位置标记从文件末尾处向后退10个字节
        用ftell函数测定文件位置标记的当前位置 :ftell函数的作用是得到流式文件中文件位置标记的当前位置,用相对于文件开头的位移量来表示。如果调用函数时出错(如不存在fp指向的文件),ftell函数返回值为-1L。

例题:有一个磁盘文件,内有一些信息。要求第1次将它的内容显示在屏幕上,第2次把它复制到另一文件上。

五、文件读写的出错检测

1、ferror函数

ferror(fp);

        在调用各种输入输出函数(如putc,getc,fread,fwrite等)时,如果出现错误,除了函数返回值有所反映外,还可以用ferror函数检查。 如果ferror返回值为0(假),表示未出错; 如果返回一个非零值,表示出错。 

2、clearerr函数 

   clearerr的作用是使文件出错标志和文件结束标志置为0。 假设在调用一个输入输出函数时出现错误,ferror函数值为一个非零值。应该立即调用clearerr(fp),使ferror(fp)的值变成0,以便再进行下一次的检测。 只要出现文件读写出错标志,它就一直保留,直到对同一文件调用clearerr函数或rewind函数,或任何其他一个输入输出函数。

 注意:对同一个文件每一次调用输入输出函数,都会产生一个新的ferror函数值,因此,应当在调用一个输入输出函数后立即检查ferror函数的值,否则信息会丢失。 在执行fopen函数时,ferror函数的初始值自动置为0。

  • 97
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值