15文件-c语言初学系列-创新互联

文件

创新互联建站是一家集网站建设,法库企业网站建设,法库品牌网站建设,网站定制,法库网站建设报价,网络营销,网络优化,法库网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

15.1 文件概述

15.2 文件的打开与关闭

15.3 文件的读写操作

15.4 文件的其它常用函数

15.1 文件概述

“文件”是指存储在计算机外部存储器中的数据的集合。计算机根据文件的名字,完成对文件的操作。

C语言将文件看作是字符构成的序列,即字符流。其基本的存储单位是字节。

C语言中的文件,按照它的ASCII代码存放,称为ASCII文件或文本(text)文件。按照数据值的二进制代码存放,称为二进制文件中。

ASCII文件中的字节与实际字符一一对应,方便字符处理和用户阅读,但占用存储空间较大。而二进制文件节省存储空间,也无需ASCII代码和二进制形式之间的转换时间,但是无法直接输出,一般用于程序与程序之间或者程序与设备之间数据的传递。

15.2 文件的打开与关闭

一、文件类型指针

C语言在stdio.h中定义了一个FILE文件结构体类型,包含管理和控制文件所需要的各种信息。

在C程序中系统对文件进行的各种操作是通过指向文件结构体的指针变量来实现的。

定义一个指向文件结构体类型的指针变量的形式:

FILE *指针变量名;

例如:  FILE  *fp1 , *fp2;

则fp1、fp2是可以指向2个FILE文件结构体的指针变量。文件指针变量的赋值操作是由打开文件函数fopen()实现的。

二、文件的打开

C语言文件的打开是通过stdio.h函数库的fopen()函数实现的。fopen()函数的原型是:

FILE *fopen(char *filename , char *mode);

其中filename是要打开的文件名,mode是说明处理文件的方式。它的调用方式一般为:

文件指针变量=fopen(文件名,处理文件方式);

例如:  fopen(“a:\\exam1.c”,”r”)

注意:

“文件名”是要打开的文件的文件名字,可以是包含盘符、路径、文件名、扩展名的文件标识符。但在书写时要符合C语言的规定。例如文件名”a:\tc\w1.c”,在该函数中的文件名应写成”a:\\tc\\w1.c”。

打开文件时“处理文件方式”决定了系统可以对文件进行的操作

如果是二进制文件,在使用时只要在模式后添加字符b即可,如“rb”、“rb+”分别表示读取二进制文件和以读取/写入打开二进制文件。

如果由于文件不存在等原因造成不能打开文件,则调用fopen()后将返回一个空指针NULL。

if ((fp= fopen(“a:\\exam1.c”,”r”))= =NULL)
       {printf(“Cannot open the file.\n”);
         exit(1);}

一般exit(0)表示程序正常退出,exit(非零值)表示程序出错后退出。

三、文件的关闭

当C语言文件使用完后,应该立即关闭文件,防止由于误操作等原因破坏已经打开的文件。文件的关闭通过stdio.h中的fclose()函数实现。具体用法是:

fclose(文件指针);

例如:

fclose(fp);

则程序将文件类型指针fp所指向的文件关闭。fp不再指向该文件。

15.3 文件的读写操作

文件打开后,最常见的操作就是读取和写入。C语言提供多种对文件的读取和写入的函数,这里主要介绍四种常用文件的读写操作函数,它们都在头文件stdio.h定义的:

按字符读写的函数fgetc()、fputc()

按字符串读写的函数fgets()、fputs()

按格式要求读写的函数fprintf()、fscanf()

按数据块读写的函数fread()、fwrite()

按字符读写的函数fgetc()、fputc()

1. fputc()函数

函数fputc()的作用是向文件写入一个字符。其调用形式为:

fputc(字符,文件型指针变量)

例: fputc(‘A’,fp);

fp为一个文件类型指针变量,上式将字符常量’A’(也可以是字符型变量)写入文件当前位置,并且使文件位置指针下移一个字节。如果写入操作成功,返回值是该字符,否则返回EOF。

按字符读写的函数fgetc()、fputc()

程序L15_3.C功能:通过键盘输入字符到文件中,直到输入“*” 结束。

   FILE *fp;   char f_name[30];   char in_char;
       printf("\n\t请输入要新建的文件名:");
       scanf("%s",f_name);
       fp=fopen(f_name,"w+");
       ……      ……
       in_char=getchar();
       while (in_char!='*')
          {fputc(in_char,fp);
            in_char=getchar();    }
       fclose(fp);

按字符读写的函数fgetc()、fputc()

2. fgetc()函数

函数fgetc()的作用是从一个文件中读取一个字符。其调用形式为:

fgetc(文件型指针变量)

例: a=fgetc(fp);

fp为一个文件类型指针变量,函数fgetc(fp)不仅返回文件当前位置的字符,并且使文件位置指针下移一个字符。如果遇到文件结束,则返回值为文件结束标志EOF。

按字符读写的函数fgetc()、fputc()

程序L15_4.C:输入文件名,输出该文件的内容。

 FILE *fp;
         char out_ch,f_name[30];
         scanf("%s",f_name);
         fp=fopen(f_name,"r");
         if (fp!=NULL)
          {while((out_ch=fgetc(fp))!=EOF)
           putchar(out_ch);      }
        else 
            printf("\n\n\t\t%s 文件不存在。\n",f_name);
        fclose(fp);
        }

按字符串读写的函数fgets()、fputs()

1. fputs()函数

函数fputs()的作用是向文件写入一个字符串。其调用形式为:

fputs(字符串,文件型指针变量)

其中字符串可以是字符串常量、指向字符串的指针变量、存放字符串数组的数组名。写入文件成功,函数返回值为0,否则为EOF。

注意:字符串的结束标志’\0’不写入。例如:

 fputs(“Hello”,fp);

fp为一个文件类型指针变量,上式将字符串中的字符H、e、l、l、o写入文件指针的当前位置。

按字符串读写的函数fgets()、fputs()

2. fgets()函数

函数fgets()的作用是从一个文件中读取一个字符串。其调用形式为:

fgets(字符数组,字符数,文件型指针变量)

例: fgets(str,n,fp);

其作用是从fp指向的文件的当前位置开始读取n-1个字符,并加上字符串结束标志’\0’一起放入字符数组str中。如果从文件读取字符时遇到换行符或文件结束标志EOF,读取结束。函数返回值为字符数组str的首地址。

按字符串读写的函数fgets()、fputs()

程序L15_5.C功能:将文件d:\data1.txt中的内容复制到d:\data2.txt中。

{FILE *f_in,*f_out;   char str[50];
   f_out=fopen(“d:\\data1.txt”,"r");
   f_in=fopen(“d:\\data2.txt”,"w");
      …… …… ……
 while(!feof(f_out))   
{fgets(str,30,f_out);
  fputs(str,f_in); }
   fclose(f_out);   fclose(f_in);
  }

按格式要求读写函数fprintf()、fscanf()

1. fprintf()函数

函数fprintf()的作用与printf()相似,只是输出对象不是标准输出设备而是文件,即按照格式要求将数据写入文件。它调用的一般形式为:

fprintf(文件型指针变量, 格式控制, 输出表列)

例如:

fprintf(fp,”%ld,%s,%5.1f”,num,name,score);

它的作用是将变量num、name、score按照%ld、%s、%5.1f的格式写入fp指向的文件的当前位置。

按格式要求读写函数fprintf()、fscanf()

2. fscanf()函数

函数scanf()从通过标准输入设备读取数据,同样函数fscanf()按照格式要求从文件中读取数据。它调用的一般形式为:

fscanf(文件型指针变量, 格式控制,输入表列);

例如:

fscanf(fp,”%ld,%s,%5.1f”,&num, name,&score);

它的作用是从fp指向的文件的当前位置开始,按照%ld、%s、%5.1f的格式取出数据,赋给变量num、name和score。

主要用于数据文件的读写,既可以使用ASCII文件也可以使用二进制文件。

按格式要求读写函数fprintf()、fscanf()

程序L15_6.C功能:将10个学生记录输入文件d:\stu1.txt中,并且显示在屏幕上。

FILE *fp;   long num;   int n,score; char name[20];
   fp=fopen("d:\\stu1.txt","w");
  for(n=1;n<=N;n++)
   { scanf("%s%10ld%d",name,&num,&score);
      fprintf(fp,"%20s%10ld%5d\n",name,num,score);}
   fclose(fp);
   fp=fopen("d:\\stu1.txt","r");
  for(n=1;n<=N;n++)
  {fscanf(fp,"%20s%10ld%5d\n",name,&num,&score);
    printf("%20s%10ld%5d\n",name,num,score);  }
  fclose(fp);  }

按数据块读写的函数fread()、fwrite()

1. fwrite()函数

函数fwrite()的作用是将成批的数据块写入文件。

  fwrite(写入文件的数据块的存放地址,一个数据块的字节数,数据块的个数,文件型指针变量);

如果函数fwrite()操作成功,则返回值为实际写入文件的数据块的个数。

例如:已知struct student 类型的数组stu[20],则语句

fwrite(&stu[1], sizeof(struct student ), 2, fp);

从结构体数组元素stu[1]存放的地址开始,以一个结构体struct student类型变量所占字节数为一个数据块,共写入文件类型指针fp指向的文件2个数据块,即stu[1]、stu[2]的内容写入文件。如果操作成功,函数的返回值为2。

按数据块读写的函数fread()、fwrite()

2. fread()函数

函数fread()的作用是从文件中读出成批的数据块。fread(从文件读取的数据块的存放地址,一个数据块的字节数,数据块的个数,文件型指针变量);

如果函数fread()操作成功,则返回值为实际从文件中读取数据块的个数。

例如:已知stu1是一个结构体struct student变量,则

fread(&stu1, sizeof(struct student ), 1, fp);

从文件类型指针fp指向的文件的当前位置开始,读取1个数据块,该数据块为结构体struct student类型变量所占字节数,然后将读取的内容放入变量stu1中。

注意:fwrite()和fread()函数读写文件时,只有使用二进制方式,才可以读写任何类型的数据。最常用于读写数组和结构体类型数据。

按数据块读写的函数fread()、fwrite()

L15_7.C:将10个学生记录输入文件d:\stu2中,然后显示。

ST  {char class[6];…………}a[N],stu;
   int i;   FILE *fp;   fp=fopen("d:\\stu2","wb");
   for(i=0;i

15.4 文件的其它常用函数

文件在使用时,指向打开的文件的指针可以指示文件的当前位置,当每次读取或写入数据时,是从文件指针的当前位置开始读取或写入数据的,然后指针自动移到读写下一个数据的位置。所以文件指针的定位非常重要。

在C语言的stdio.h头文件中定义的一些文件操作中常用的库函数。

函数feof()、rewind()、fseek()、ftell()

函数feof()

一、 函数feof()

函数feof()用来检测一个指向文件的指针是否已经指到了文件最后的结束标志EOF。调用的一般形式为:

feof(文件型指针变量);

如果文件型指针指向的文件的当前位置为结束标志EOF,则函数返回一个非零值,否则返回0值。

函数rewind()

函数rewind()将令指向文件的指针重新指向文件的开始位置。函数无返回值。其调用形式为:

rewind(文件型指针变量);

例如:

  rewind(fp);

fp是一个指向文件的指针,执行该语句后,fp指向文件的开始位置,即文件的第一个数据。

函数fseek()

函数fseek()可以将使得指向文件的指针变量指向文件的任何一个位置,实现随机读写文件。它调用的形式为:

fseek(文件型指针变量,偏移量,起始位置);

函数fseek()将以文件的起始位置为基准,根据偏移量往前或往后移动指针。其中偏移量是一个长整型数,表示从起始位置移动的字节数,正数表示指针往后移、负数表示指针往前移。起始位置用数字0、1、2或者用名字SEEK_SET、SEEK_CUR、SEEK_END代表文件开始、文件当前位置和文件结束位置。如果指针设置成功,返回值为0,否则为非0值。

函数ftell()

函数ftell()用于测试指向文件的指针的当前位置。它的调用方式为:

ftell(文件型指针变量);

函数的返回值是一个常整型数,如果测试成功,则返回指向文件的指针当前指向的位置距离文件开头的字节数,否则返回-1L

作业与上机练习

1.将键盘输入的10个浮点数保存到一个二进制文件中,然后在文件末尾再追加若干数据,最后统计文件中数据的个数。

2.已知2个文件data1和data2,将它们的内容合并起来,生成第3个文件data3。

3.文件加解密,异或方式。

4. 利用文件知识,参照L15_9.C例题,完成“学生成绩管理信息系统”的开发。

ps: 对应ppt模板下载地址如下:

15-文件-自己使用的C语言教程PPT-适合老师备课或者自学.pptx-C文档类资源-下载

全部课程的PPT已经整理好了,需要的童鞋可以点击下载
总-自己使用的C语言教程PPT-适合老师备课或者自学-15篇PPT合集.zip-C文档类资源-下载

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


文章名称:15文件-c语言初学系列-创新互联
网页URL:http://scyanting.com/article/dcpees.html