在C语言中用一个指针变数指向一个档案,这个指针称为档案指针。通过档案指针就可对它所指的档案进行各种操作。
基本介绍
- 中文名:档案指针
- 外文名: file pointer
- 定义说明形式:FILE *指针变数标识符等
- 控制方法:定义一个流对象并指定档案连线等
概念
头档案:fstream.h:档案输入输出流
定义
定义说明档案指针的一般形式为:
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称为指向一个档案的指针。
控制方法
fstream streamObject("example.txt");//首先定义一个流对象,并指定一个档案连线:
//然后是控制指针,也就是楼主你想要的答案,
//一般是使用seekg函式来控制档案的指针:
//打开后默认是指向档案开头
//因此打开后有没有下面这句代码是一样的,下面的代码表示指向档案开头
streamObject.seekg(ios::beg);//指向开头(和streamObject.seekg(0,ios::beg)效果是一样的)
streamObject.seekg(ios::end);//指向末尾:
streamObject.seekg(10,ios::cur); //让档案指针从当前位置向档案末方向移动10个位元组
streamObject.seekg(-10,ios::cur); //让档案指针从当前位置向档案开始方向移动10个位元组
streamObject.seekg(10,ios::beg); //让档案指针定位到离档案开头10个位元组的位置
...以此类推
读取档案指针当前指向的数据的方式是这样的:
比如读取int:
int i;
streamObject>>i;
读取字元串:
string str;
streamObject>>str;
默认会自动过滤空格和换行
读取后档案指针会向档案末方向偏移读取的位元组数
//然后是控制指针,也就是楼主你想要的答案,
//一般是使用seekg函式来控制档案的指针:
//打开后默认是指向档案开头
//因此打开后有没有下面这句代码是一样的,下面的代码表示指向档案开头
streamObject.seekg(ios::beg);//指向开头(和streamObject.seekg(0,ios::beg)效果是一样的)
streamObject.seekg(ios::end);//指向末尾:
streamObject.seekg(10,ios::cur); //让档案指针从当前位置向档案末方向移动10个位元组
streamObject.seekg(-10,ios::cur); //让档案指针从当前位置向档案开始方向移动10个位元组
streamObject.seekg(10,ios::beg); //让档案指针定位到离档案开头10个位元组的位置
...以此类推
读取档案指针当前指向的数据的方式是这样的:
比如读取int:
int i;
streamObject>>i;
读取字元串:
string str;
streamObject>>str;
默认会自动过滤空格和换行
读取后档案指针会向档案末方向偏移读取的位元组数
使用举例
#include<stdio.h>#include<stdlib.h>int main(int argc,char *argv[]){char buf[1024];FILE *fp=NULL;if(argc!=2){fprintf(stderr,"argumenterror\ntry%sfilename\n",argv[1]);exit(1);}if((fp=fopen(argv[1],"r"))==NULL){perror("fopen");exit(1);}while(fgets(buf,1024,fp)!=NULL)printf("%s\n",buf);fclose(fp);return 0;}~