高级语言程序设计第10章文件操作_第1页
高级语言程序设计第10章文件操作_第2页
高级语言程序设计第10章文件操作_第3页
高级语言程序设计第10章文件操作_第4页
高级语言程序设计第10章文件操作_第5页
已阅读5页,还剩50页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言程序设计-第10章文件操作1第10章文件操作C语言程序设计-第10章文件操作2目录10.1文件概述10.2文件类型指针10.3文件的打开和关闭10.4文件的读写10.5文件的定位C语言程序设计-第10章文件操作310.1文件(File)C语言中的文件C语言把文件看作一个字节的序列C语言对文件的存取是以字节为单位的文本文件(ASCII文件)按数据的ASCII形式存储二进制文件按数据在内存中的二进制形式存储C语言程序设计-第10章文件操作4文本文件和二进制文件C语言程序设计-第10章文件操作5缓冲文件系统C语言程序设计-第10章文件操作610.2文件类型指针FILE类型保存被使用的文件的有关信息所有的文件操作都需要FILE类型的指针FILE是库文件中定义的结构体的别名注意不要写成structFILE举例FILE*fp;C语言程序设计-第10章文件操作7FILE类型typedefstruct{shortlevel;/*缓冲区满空程度*/unsignedflags;/*文件状态标志*/charfd;/*文件描述符*/unsignedcharhold;/*无缓冲则不读取字符*/shortbsize;/*缓冲区大小*/unsignedchar*buffer;/*数据缓冲区*/unsignedchar*curp;/*当前位置指针*/unsignedistemp;/*临时文件指示器*/shorttoken;/*用于有效性检查*/}FILE;C语言程序设计-第10章文件操作810.3文件的打开(fopen函数)函数原型FILE*fopen(char*filename, char*mode);参数说明filename:要打开的文件路径mode:打开模式返回值若成功,返回指向被打开文件的指针若出错,返回空指针NULL(0)C语言程序设计-第10章文件操作9文件的打开模式打开模式描述r只读,打开已有文件,不能写w只写,创建或打开,覆盖已有文件a追加,创建或打开,在已有文件末尾追加r+读写,打开已有文件w+读写,创建或打开,覆盖已有文件a+读写,创建或打开,在已有文件末尾追加t按文本方式打开(缺省)b按二进制方式打开C语言程序设计-第10章文件操作10文件的打开举例FILE*fp1,*fp2,*fp3;charfilename[]="file3.dat";/*以文本只读方式打开file1

*/if(!(fp1=fopen("file1","r"))){printf("CannotOpenThisFile!\n");exit(0);/*退出程序*/}/*以二进制读写方式打开FILE2.TXT

*/fp2=fopen("C:\\HOME\\FILE2.TXT","rb+");/*以二进制读写方式打开file3.dat

*/fp3=fopen(filename,"a+b");C语言程序设计-第10章文件操作11文件的关闭(fclose函数)函数原型intfclose(FILE*fp);参数说明fp:要关闭的文件指针返回值若成功,返回0若出错,返回EOF(-1)不用的文件应关闭,防止数据破坏丢失C语言程序设计-第10章文件操作12文件的关闭举例FILE*fp;charfile[]="D:\\USER\\STUDENTS.DAT";if(!(fp=fopen(file,"rb+"))){printf("Openfile%serror!\n",file);exit(0);}......fclose(fp);C语言程序设计-第10章文件操作1310.4文件的读写函数功能函数功能fputc输出字符fprintf格式化输出fgetc输入字符fscanf格式化输入putc输出字符putw输出一个字getc输入字符getw输入一个字fwrite输出数据块fputs输出字符串fread输入数据块fgets输入字符串C语言程序设计-第10章文件操作14feof函数函数原型intfeof(FILE*fp);参数fp:文件指针返回值若文件结束,返回非零值若文件尚未结束,返回0C语言程序设计-第10章文件操作15fputc/putc函数函数原型intfputc(intc,FILE*fp);intputc(intc,FILE*fp);参数c:要输出到文件的字符fp:文件指针返回值若成功,返回输出的字符若失败,返回EOFC语言程序设计-第10章文件操作16fgetc/getc函数函数原型intfgetc(FILE*fp);intgetc(FILE*fp);参数fp:文件指针返回值若成功,返回输入的字符若失败或文件结束,返回EOFC语言程序设计-第10章文件操作17fputc和fgetc函数举例FILE*fp1,*fp2;charc;fp1=fopen("file.in","r");fp2=fopen("file.out","w");while(!feof(fp1)){c=fgetc(fp1);fputc(c,fp2);}fclose(fp1);fclose(fp2);C语言程序设计-第10章文件操作18fwrite和fread函数(1)函数原型size_tfwrite(void*buffer, size_tsize, size_tcount, FILE*fp);size_tfread(void*buffer, size_tsize, size_tcount, FILE*fp);C语言程序设计-第10章文件操作19fwrite和fread函数(2)参数buffer:要读/写的数据块地址size:要读/写的每个数据项的字节数count:要读/写的数据项数量fp:文件指针返回值若成功,返回实际读/写的数据项数量若失败,一般返回0C语言程序设计-第10章文件操作20fwrite和fread函数举例FILE*fp;inti;structstudents[NUM];fp=fopen("students.dat","rb+");for(i=0;i<NUM;i++)

fwrite(s+i,sizeof(structstudent),1,fp);for(i=0;i<NUM;i++)

fread(s+i,sizeof(structstudent),1,fp);fclose(fp);C语言程序设计-第8章结构体21结构体类型的声明举例structstudent{unsignednum;/*学号*/charname[20];/*姓名*/charsex;/*性别*/unsignedage;/*年龄*/floatscore;/*分数*/charaddr[50];/*地址*/};C语言程序设计-第8章结构体22结构体数组与二维表numnamesexbirthdayscoreyearmonthdays[0]1001TomM19801285.5s[1]1002KateF198111489.0s[2]1003MikeM19803595.5s[3]1004JohnM198181373.0s[4]1005LilyF19813681.0structstudents[5];结构体一维数组C语言程序设计-第8章结构体23结构体声明和变量定义structdate{intyear,month,day;};structstudent{unsignednum;charname[20];charsex;

structdatebirthday;floatscore;}stu1,stu2;C语言程序设计-第8章结构体24结构体数组初始化及应用举例structstudents[5]={{1001,"Tom",'M',{1980,1,2},85.5},{1002,"Kate",'F',{1981,11,4},89.0},{1003,“Mike”,‘M’,{1980,3,5},95.5},{1004,“John”,‘M’,{1981,8,13},73.0},{1005,“Lily”,‘F’,{1981,3,6},81.0},};C语言程序设计-第10章文件操作25C语言程序设计-第10章文件操作26fprintf和fscanf函数函数原型intfscanf(FILE*fp, char*format[,address,...]);intfprintf(FILE*fp, char*format[,argument,...]);说明与printf和scanf函数类似从文件输入或输出到文件C语言程序设计-第10章文件操作27putw函数函数原型intputw(intw,FILE*fp);参数w:要输出到文件的整数(字)fp:文件指针返回值若成功,返回输出的整数(字)若失败,返回EOFC语言程序设计-第10章文件操作28getw函数函数原型intgetw(FILE*fp);参数fp:文件指针返回值若成功,返回输入的整数(字)若失败,返回EOFC语言程序设计-第10章文件操作29fputs函数函数原型intfputs(char*s,FILE*fp);返回值若成功,返回输出字符个数(或最后的字符)若失败,返回EOF说明字符串的结束标志'\0'不会输出到文件也不会在字符串末尾自动添加换行符C语言程序设计-第10章文件操作30fgets函数函数原型char*fgets(char*s,intn, FILE*fp);返回值若成功,返回s首地址;若失败,返回NULL说明从fp输入字符串到s中输入n-1个字符,或遇到换行符或EOF为止读完后自动在字符串末尾添加'\0'C语言程序设计-第10章文件操作3110.5文件的定位文件位置指针位置指针指向当前读写的位置每次读写文件,位置指针都会相应移动可以通过相关函数强制修改位置指针相关函数rewind函数fseek函数ftell函数C语言程序设计-第10章文件操作32rewind函数函数原型voidrewind(FILE*fp);参数fp:文件指针功能使文件位置指针重新返回文件开头C语言程序设计-第10章文件操作33fseek函数(1)函数原型intfseek(FILE*fp,longoffset, intwhence);参数fp:文件指针offset:偏移量whence:起始位置功能随机改变文件的位置指针C语言程序设计-第10章文件操作34fseek函数(2)起始位置SEEK_SET(0):文件开始SEEK_CUR(1):文件当前位置SEEK_END(2):文件末尾举例fseek(fp,100L,SEEK_SET);fseek(fp,-10L,SEEK_CUR);fseek(fp,-20L,SEEK_END);C语言程序设计-第10章文件操作35ftell函数函数原型longftell(FILE*fp);参数fp:文件指针返回值若成功,返回当前文件指针位置若出错,返回-1L文件操作—写入文件文件操作---写入文件读出文件两个常量输出->文件->文件指针回到头->从文件输入两个数据到内存变量f和str->关闭文件->输出两个内存变量到显示器scanf()键盘内存变量printf()内存变量屏幕fscanf()文件内存变量fprintf()内存变量文件fgets()读文件一个字符串内存变量fputs()内存一个字符串文件fgetc()读文件一个字符内存变量fputc()内存一个字符文件键盘输入->内存变量->输出->文件在项目目录下用记事本打开客户数据文件例:从键盘输入10个字符,写到a盘根目录下名为“char1.txt”的文本文件中。

#include<stdlib.h>voidmain(){ inti;charch; FILE*fp; if((fp=fopen(“a:\\char1.txt”,”w”))==NULL) { printf(“testcan’topen.\n”); exit(0); } for(i=0;i<10;i++) { ch=getchar();

fputc(c,fp); } fclose(fp);}例:从a盘根目录下名为“char1.txt”的文本文件中读取前10个字符,并显示在屏幕上。

#include<stdlib.h>voidmain(){inti;charch;FILE*fp;if((fp=fopen(“a:\\char1.txt”,”r”))==NULL){printf(“filecan’topen.\n”);exit(0);}while(!feof(fp)){ch=fgetc(fp);putchar(ch);}fclose(fp);}例:编一程序,完成文本文件的复制#include<stdio.h>main(intargc,char*argv[]){charch;FILE*fp1,*fp2;if(argc!=3){printf("USAGE:dcopyfile1file2\n");exit(0);}if((fp1=fopen(argv[1],"r"))==NULL){printf("Cannotopensourcefile%sforinput",argv[1]);exit(0);}if((fp2=fopen(argv[2],"w"))==NULL){printf("Cannotopendestinationfile%sforoutput",argv[2]);exit(0)}while(!feof(fp1))fputc(fgetc(fp1),fp2);fclose(fp1);fclose(fp2);}以下程序的功能是:从键盘上输入一个字符串,把该字符串中的小写字母转换为大写字母,输出到文件test.txt中,然后从该文件读出字符串并显示出来,请填空。#include<stdio.h>main(){FILE*fp;charstr[100];inti=0;

if((fp=fopen("text.txt",

))==NULL){printf("can'topenthisfile.\n");exit(0);}printf("inputastring:\n");gest(str);while(str[i]){if(str[i]='a'&&str[i]<='z')str[i]=

;

fputc(str[i],fp);i++;}fclose(fp);

fp=fopen("test.txt“,

)

fgets(str,100,fp);printf("%s\n",str);fclose(fp);}“w”str[i]-32;“r”例从键盘输入4个学生数据,把他们转存到磁盘文件中去#include<stdio.h>#defineSIZE2structstudent_type{charname[10];intnum;intage;charaddr[15];}stud[SIZE];main(){inti;for(i=0;i<SIZE;i++)

scanf("%s%d%d%s",stud[i].name,&stud[i].num, &stud[i].age,stud[i].addr);save();display();}voidsave(){FILE*fp;inti;if((fp=fopen("d:\\stu_dat","wb"))==NULL){printf("cannotopenfile\n");return;}for(i=0;i<SIZE;i++)if(fwrite(&stud[i],sizeof(structstudent_type),1,fp)!=1) printf("filewriteerror\n");fclose(fp);}voiddisplay(){FILE*fp;inti;if((fp=fopen("d:\\stu_dat","rb"))==NULL){printf("cannotopenfile\n");return;}for(i=0;i<SIZE;i++){fread(&stud[i],sizeof(structstudent_type),1,fp);printf("%-10s%4d%4d%-15s\n",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);}fclose(fp);}例从键盘按格式输入数据存到磁盘文件中去#include<stdio.h>intmain(){chars[80],c[80];inta,b;FILE*fp;if((fp=fopen("test","w"))==NULL){puts("can'topenfile");exit();}fscanf(stdin,"%s%d",s,&a);fprintf(fp,"%s%d",s,a);fclose(fp);if((fp=fopen("test","r"))==NULL){puts("can'topenfile");exit();}fscanf(fp,"%s%d",c,&b);fprintf(stdout,"%s%d",c,b);fclose(fp);retrun0;}例从键盘读入字符串存入文件,再从文件读回显示#include<stdio.h>main(){FILE*fp;charstring[81];if((fp=fopen("file.txt","w"))==NULL){printf("cann'topenfile");exit(0);}while(strlen(gets(string))>0){fputs(string,fp);

fputs("\n",fp);}fclose(fp);if((fp=fopen("file.txt","r"))==NULL){printf("cann'topenfile");exit(0);}while(fgets(string,81,fp)!=NULL)

fputs(string,stdout);fclose(fp);}例对一个磁盘文件进行显示和复制两次操作#include<stdio.h>main(){FILE*fp1,*fp2;fp1=fopen("d:\\ch12_4.c","r");fp2=fopen("d:\\ch12_41.c","w");while(!feof(fp1))putchar(fgetc(fp1));

rewind(fp1);while(!feof(fp1))fputc(getc(fp1),fp2);fclose(fp1);fclose(fp2);}main(){inti;FILE*fp;if((fp=fopen("studat","rb"))==NULL){printf("can'topenfile\n");exit(0);}for(i=0;i<3;i+=2){fseek(fp,i*sizeof(structstudent_type),0);

fread(&stud[i],sizeof(structstudent_type),1,fp);printf("%s%d%d%s\n",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);}fclose(fp);}#include<stdio.h>stru

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论