① c语言文件类型指针
c语言文件类型指针是通过FILE *fp; 这种形式进行定义的。
关于FILE结构在VC6中有如下定义:
#ifndef_FILE_DEFINEDstruct_iobuf{char*_ptr;//文件输入的下一个位置int_cnt;//当前缓冲区的相对位置char*_base;//指基础位置(即是文件的起始位置)int_flag;//文件标志int_file;//文件描述符idint_charbuf;//检查缓冲区状况,如果无缓冲区则不读取int_bufsiz;//文件缓冲区大小char*_tmpfname;//临时文件名};typedefstruct_iobufFILE;#define_FILE_DEFINED#endif
C程序用不同的FILE结构管理每个文件。程序员可以使用文件,但是不需要知道FILE结构的细节。实际上,FILE结构是间接地操作系统的文件控制块(FCB)来实现对文件的操作的,如下图:
上面图中的_file实际上是一个描述符,作为进入打开文件表索引的整数。
文件是存放在物理磁盘上的,包括文件控制块(FCB)和数据块。文件控制块通常包括文件权限、日期(创建、读取、修改)、拥有者、文件大小、数据块信息。数据块用来存储实际的内容。当打开一个文件时,程序会将物理磁盘上的文件数据块读入到内存,然后通过文件指针的移动读取内存中的文件数据。
相关函数:
FILE *fopen( char *file, char *open_mode ); //打开文件,读文件到内存,返回文件信息结构指针
int fread( char s, int size, int num, FILE *fp ); //按字节读取文件内容到s中
int fwrite( char s, int size, int num, FILE *fp ); //按字节将s地址中的数据写到文件中
char *fgets( char *s, int max_size, FILE *fp); //读一行数据到缓冲区s中
intfseek( FILE *fp, long offset, int whence); //移动文件指针到指定位置
void rewind(FILE *fp); //回到文件头
long ftell(FILE *fp); //得到当前文件偏移位置
fclose(fp); //关闭文件,刷新缓存到物理磁盘上
② C语言的磁盘文件问题
C语言文件操作函数1,两种文件存取方式(输入,输出方式) 顺序存取 直接存取 2,数据的两种存放形式 文本文件 二进制文件 13.2文件指针 定义文件类型指针变量的一般形式: FILE *指针变量名; 例如: FILE *fp1,*fp2; 13.3打开文件 在使用文件之前,需打开文件.在C里使用fopen函数打开文件.格式为: fopen(文件名,文件使用方式); 此函数返回一个指向FILE类型的指针.如: FILE *fp; fp=fopen("file_1","r"); 如果调用成功,fp就指向file_1,否则返回为NULL,所以为了保证文件的正确使用,要进行测试.采用如下语句: If((fp=fopen("file_1","r"))==NULL) { printf("Cannot open this file\n"); exit(0); } 13.4关闭文件 当文件的读写操作完成之后,使用fclose函数关闭文件.格式如下: fclose(文件指针) 如:fclose(fp); 13.5调用getc(fgetc)和putc(fputc)函数进行输入和输出 1,调用putc(或fputc)函数输出一个字符 调用形式为: putc(ch,fp); 功能是:将字符ch写到文件指针fp所指的文件中去.当输出成功,putc函数返回所输出的字符;否则,返回一个EOF值.EOF是在stdio.h库 函数文件中定义的符号常量,其值等于-1. 13.5调用getc(fgetc)和putc(fputc)函数进行输入和输出 例如:把从键盘输入的文本按原样输出到名为file_1.dat文件中,用字符@作为键盘输入结束标志. #include Void main() { FILE *fpout; char ch; if(fpout=fpopen("file_1","w")==NULL) { printf("Cannot open this file!\n"); exit(0); } ch=getchar(); while(ch!='@') { fputc(ch,fpout); ch=getchar(); } fclose(fpout); } 2.调用getc(或fgetc)函数输入一个字符 调用形式为: ch=getc(pf); 功能是:从pf指定的文件中读如一个字符,并把它作为函数值返回. 例如:把一个已存在磁盘上的file_1.dat文本文件中的内容,原样输出到终端屏幕上. #include void main(){ FILE *fpin; char ch; if((fpin=fopen("file_1.dat","r"))==NULL) { printf("Cann't open this file!\n");exit(0);} ch=fgetc(fpin); while (ch!=EOF) { putchar(ch); ch=fgetc(fpin);} fclose(fpin); } 13.6判断文件结束函数feof EOF可以作为文本文件的结束 标志,但不能作为二进制文件的结束符.feof函数既可以判断二进制文件,又可以判断文本文件. 例:编写程序,用于把一个文本文件(源)复制到另一个文件(目的)中,源文件名和目的文件名由命令行输入.命令形式如下: 可执行程序名 源文件名 目的文件名 #include void file(FILE* ,FILE *); void main(int argc,char *argv[]){ FILE *fpin,*fpout; if(argc==3) { fpin=fopen(argv[1],"r"); fpout=fopen(argv[2],"w"); file(fpin,fpout); fclose(fpin);fclose(fpout); } else if(argc>3) printf("The file names too many!!\n"; else printf("There are no file names for input or output!!\n ); } void file(FILE *fpin,FILE *fpout) { char ch; ch=getc(fpin); while(!feof(fpin)) {putc(ch,fpout); ch=getc(fpin);} } 13.7fscanf函数和fprintf函数 1,fscanf函数 fscanf只能从文本文件中按格式输入,和scanf函数相似,只不过输入的对象是磁盘上文本文件中的数据.调用形式为: fscanf(文件指针,格式控制字符串,输入项表) 例如:fscanf(fp,"%d%d",&a,&b); fscanf(stdin,"%d%d",&a,&b); 等价于scanf("%d%d",&a,&b); 3.fprintf函数 fprintf函数按格式将内存中的数据转换成对应的字符,并以ASCII代码形式输出到文本文件中.Fprintf函数和printf函数相似,只是 将输出的内容按格式存放到磁盘的文本文件中.调用形式如下: fprintf(文件指针,格式控制字符串,输出项表) 如:fprintf(fp,"%d %d",x,y); 以下语句 fprintf(stdout,"%d %d",x,y) 13.8fgets函数和fputs函数 1,fgets函数 fgets函数用来从文件中读入字符串.调用形式如下: fgets(str,n,fp); 函数功能是:从fp所指文件中读入n-1个字符放入str为起始地址的空间内;如果在未读满n-1个字符时,则遇到换行符或一个EOF结束本次读操作, 并已str作为函数值返回. 13.8fgets函数和fputs函数 2,fputs函数 fput函数把字符串输出到文件中.函数调用形式如下: fputs(str,fp); 注意:为了便于读入,在输出字符串时,应当人为的加诸如"\n"这样的字符串. 13.9fread函数和fwrite函数 fread and fwrite函数用来读,写二进制文件.它们的调用形式如下: fread(buffer,size,count,fp); fwrite(buffer,size,count,fp); buffer:要输入或输出的数据块的首地址 count:每读写一次,输入或输出数据块的个数 size:每个数据块的字节数 fp:文件指针 13.9fread函数和fwrite函数 例如有如下结构体: struct st{ char num[8]; float mk[5]; }pers[30]; 以下循环将把这30个元素中的数据输出到fp所指文件中. for(i=0;i<30;i++) fwrite(&pers[i],sizeof(struct st),1,fp); 13.9fread函数和fwrite函数 以下语句从fp所指的文件中再次将每个学生数据逐个读入到pers数组中. i=0; fread(&pers[i],sizeof(struct st),1,fp); while(!feof(fp)) { i++; fread(&pers[i],sizeof(struct st),1,fp); } 13.10文件定位函数 1,fseek函数 fseek函数用来移动文件位置指针到指定的位置上,接着的读或写操作将从此位置开始.函数的调用形式如下: fseek(pf,offset,origin) pf:文件指针 offset:以字节为单位的位移量,为长整形. origin:是起始点,用来指定位移量是以哪个位置为基准的. 1,fseek函数 位移量的表示方法 标识符 数字 代表的起始点 SEEK_SET 0 文件开始 SEEK_END 2 文件末尾 SEEK_CUR 1 文件当前位置 假设pf已指向一个二进制文件,则; fseek(pf,30L,SEEK_SET) fseek(pf,-10L*sizeof(int),SEEK_END) 对于文本文件,位移量必须是0;如: fseek(pf,0L,SEEK_SET) fseek(pf,0L,SEEK_END) 2. ftell函数 ftell函数用以获得文件当前位置指针的位置,函数给出当前位置指针相对于文件开头的字节数.如; long t; t=ftell(pf); 当函数调用出错时,函数返回-1L. 我们可以通过以下方式来测试一个文件的长度: fseek(fp,0L,SEEK_END); t=ftell(fp); 3.rewind函数 调用形式为: rewind(pf); 函数没有返回值.函数的功能是使文件的位置指针回到文件的开头. 最常用的文件使用方式及其含义如下: 2,"rb".为读而打开二进制文件. 4,"wb".为写而打开二进制文件6,"ab".为在文件后面添加数据而打开一个二进制文件.8,"rb+".为读和写而打开二进制文件.只是在随后的读写时,可以由位置函数设置读和写的起始位置.9,"w+".首先建立一个新文件,进行写操作,随后可以从头开始读.(若文件存在,原内容将全部消失) 10,"wb+".功能与"w+"同.只是在随后的读写时,可以由位置函数设置读和写的起始位置11,"a+".功能与"a"相同;只是在文件尾部添加新的数据后,可以从头开始读. 12,"ab+".功能与"a+"相同;只是在文件尾部添加新数据之后,可以由位置函数设置开始读的起始位置.1,"r".为读而打开文本文件.(不存在则出错) 3,"w".为写而打开文本文件.(若不存在则新建,反之,则从文件起始位置写,原内容将被覆盖) . 5,"a".为在文件后面添加数据而打开文本文件.(若不存在,则新建;反之,在原文件后追加) 7,"r+".为读和写而打开文本文件.(读时,从头开始;在写数据时,新数据只覆盖所占的空间,其后不变)
③ c语言定义文件指针时(FILE *fp)一定要写*fp吗、可以换成别的字母不
这个fp这个标识符是可以换的。。。只不过一般情况下,书上,老师都是这么干的。但是*一定要留着,*是类型的一部分,是FILE*的一部分,表示文件指针,这个是不能变的。如果你要写一个既要文件输入又要文件输出的功能,肯定要两个文件指针,不能两个都定义成fp啊,这个随便定义的。
④ 文件指针*fp如何使用
FILE *fp;定义一个文件指针fp=fopen("test.txt","wb");以写方式打开一个文件for(int i=1;i<=100;i++)回fwrite(&i,sizeof(int),1,fp);写入文件中数答据fclose(fp);关闭文件
⑤ C++中 FILE*fp 是什么意思
FILE是在C标准库中(stdio.h)中定义的一个结构体,通常用指针的方式保存在内存中,其内容描述了一个文件,或者说”流“更恰当。
它的具体内容在不同的操作系统或标准库的实现中各不相同,如在TC2.0中(定义参考自http://www.cnblogs.com/haore147/p/3648395.html,没有考证过)
typedefstruct{shortlevel;/*fill/emptylevelofbuffer*/unsignedflags;/*Filestatusflags*/charfd;/*Filedescriptor*/unsignedcharhold;/*Ungetccharifnobuffer*/shortbsize;/*Buffersize*/unsignedchar*buffer;/*Datatransferbuffer*/unsignedchar*curp;/*Currentactivepointer*/unsignedistemp;/*Temporaryfileindicator*/shorttoken;/*Usedforvaliditychecking*/}FILE;/*ThisistheFILEobject*/
因此,标准库中提供了通用的函数来读取和写入流,如fopen,fclose等等
FILE指针的使用在C中很广泛,如一些常用的输入/出流就是FILE*的类型,如
stdin、stdout、stderr等
当然,C++中用类进行了封装,更加具体和方便。
综上,FILE*fp就是声明了一个类型为FILE的,名为fp的指针(fp指file pointer, 文件指针),用于保存流信息
其用法如
#include<stdio.h>intmain(){FILE*fp;charstr_buf[11];fp=fopen("test_file.txt","r");//这里要确保test_file.txt的存在if(fp)fgets(str_buf,10,fp);elseprintf("Cannotfindfiletest_file.txt");return0;}
⑥ 文件指针的定义
定义说明文件指针的一般形式为:FILE *指针变量标识符;其中FILE应为大写,它实际上是由系统定义的一个结构,该结构中含有文件名、文件状态和文件当前位置等信息。在编写源程序时不必关心FILE结构的细节。在使用文件时,需要在内存中为其分配空间,用来存放文件的基本信息,给结构体类型是由系统定义的,C语言规定该类型为FILE型,其声明如下:typedef struct{short level;unsigned flags;char fd;unsigned char hold;short bsize;unsigned char *buffer;unsigned ar *curp;unsigned istemp;short token;}FILE; 例如:FILE *fp;表示fp是指向FILE结构的指针变量,通过fp即可找存放某个文件信息的结构变量,然后按结构变量提供的信息找到该文件,实施对文件的操作。习惯上也笼统地把fp称为指向一个文件的指针。
⑦ c语言中怎样定义文件指针
FILE*fp这就是文件指针定义方式啊还问文件指针怎么定义?你是想知道FILE是什么吧?它是一个结构体:struct_iobuf{char*_ptr;int_cnt;char*_base;int_flag;int_file;int_charbuf;int_bufsiz;char*_tmpfname;};typedefstruct_iobufFILE;
⑧ C语言中FILE *fp是什么意思,文件流又是什么
FILE 是系统定义的一种结构类型的名称。
FILE *fp; 变量类型声明。声明 fp 是 FILE型指针,回用于指向FILE类型 (文件结构)。
文件流答– 排成一队,有先后次序的 输入(或输出)一串数据,驻留并通过 输入输出缓冲区,进出程序。如同水流般地流入或流出。它来自文件或写入文件。
(8)定义文件型指针fp的正确格式是扩展阅读:
在程序运行时,常常需要将一些数据(运行的最终结果或中间数据)输出到磁盘上存放起来,以后需要时再从磁盘中输入到计算机的内存。这就要用到磁盘文件。
C语言将文件看作是一个字符(字节)的序列,即一个一个字符(字节)的数据顺序组成。根据数据的组成形式,可分为ASCII文件和二进制文件。ASCII文件又称文本(text)文件,它的每一个字节可放一个ASCII码,代表一个字符。二进制文件是把内存中的数据按其在内存中的存储形式按原样输出到磁盘上存放。
⑨ C语言中FILE*fp是什么意思
FILE 是系统定义的一种结构类型的名称。
FILE *fp; 变量类型声明。声明 fp 是 FILE型指针,用于指向FILE类型 (文件结构)。
文件流– 排成一队,有先后次序的 输入(或输出)一串数据,驻留并通过 输入输出缓冲区,进出程序。如同水流般地流入或流出。它来自文件或写入文件。
(9)定义文件型指针fp的正确格式是扩展阅读:
FILE *fp的替换用法:
fp=fopen("test.dat", "w"); /*建立一个文字文件只写*/
fclose(fp); /*关闭文件*/
fwrite(const void*buffer,size_t size,size_t count,FILE*stream);
1、buffer:是一个指针,对fwrite来说,是要输出数据的地址。
2、size:要写入的字节数;
3、count:要进行写入size字节的数据项的个数;
4、stream:目标文件指针。
⑩ 如何定义指向文件的指针
指向文件的指针也就是文件指针,可以用FILE来定义一个文件指针。格式如下:FILE *文件指针; FILE:文件缓冲区的类型名,必须大写文件指针:指向文件缓冲区的指针例如: FILE *fp; // 定义一个文件指针fp注:使用文件指针的时候,必须将头文件#include<stdio.h>包含进源文件中。