精华内容
下载资源
问答
  • 文件指针

    千次阅读 2012-06-01 15:41:43
    移动文件指针 SetFilePointer,hFile,lDistanceToMove,lpDistanceToMoveHigh,dwMoveMethod dwMoveMethod 指明移动的模式 FILE_BEGIN 不管文件处于什么地方,总是从文件的头部开始移动,这时的位置参数相当于指定了...

    一.移动文件指针
    SetFilePointer,hFile,lDistanceToMove,lpDistanceToMoveHigh,dwMoveMethod
    dwMoveMethod 指明移动的模式
    FILE_BEGIN        不管文件处于什么地方,总是从文件的头部开始移动,这时的位置参数相当于指定了一个绝对位置
    FILE_CURRENT   从当前的文件指针处开始移动,这时的位置参数相当于指定了一个相对位置
    FILE_END           从文件尾开始移动,如果要从文件尾往回移动一段距离,那么位置参数就应该指定为负数

    Win32文件操作函数可以支持很多对象,有些对象并不支持文件指针,对他们就不能使用SetFilePointer函数

    既然文件指针可以设置,那么如何获取当前的文件指针呢?
    实际上 并没有一个专用的函数可以完成这个功能,,但是我们可以巧妙的利用SetFilePointer来获取当前的文件指针

    invoke SetFilePointer,hFile,0,NULL,FILE_CURRENT
    实际上文件并没有移动,所以返回值就是当前的文件指针

    二.文件分割
    文件指针可以移动到文件所有数据的后面,比如,现在文件的长度是100B,但是还是可以把文件指针的数据移动到1000B的位置,这样的操作有什么用处呢?用途是可以将文件扩展到需要的长度,,接着在用WriteFile写入数据,就是从1000B的地方开始写入.

    使用SetEndOfFile函数也可以扩展文件长度,SetEndOfFile总是将文件的长度调整到当前文件指针指向的长度,,所以这个函数还有截断文件的功能,当文件指针位于文件文件中间的时候,函数将文件指针后面的内容截断,当文件指针位于文件尾以后的位置,函数将文件长度扩展.
    invoke SetEndOfFile,hFile

    当文件被扩展的时候,被扩展部分的内容是不确定的(MSDN说的,试验的结果好像这部分总是0)

     

     

    ;--------------------------------------------------------------------------------
    ;程序环境设置
    .386
    .model flat,stdcall
    option casemap:none
    ;--------------------------------------------------------------------------------
    ;头文件与库文件导入
    include windows.inc
    include kernel32.inc
    include user32.inc
    
    includelib kernel32.lib
    includelib user32.lib
    
    
    L	macro	@var:VARARG
    	LOCAL	@lbl
    	.const
    	@lbl		db	@var,0
    	.code
    	exitm	<offset @lbl>
    endm
    ;--------------------------------------------------------------------------------
    ;函数定义
    ;--------------------------------------------------------------------------------
    ;等值替换定义
    ;--------------------------------------------------------------------------------
    ;宏定义
    ;--------------------------------------------------------------------------------
    ;包含文件
    ;--------------------------------------------------------------------------------
    ;已初始化数据段
    .data
    dwDistanceLow	dd	1024 * 1024
    ;--------------------------------------------------------------------------------
    ;未初始化数据段
    .data?
    hFile		dd		?
    dwBytes	dd		?
    ;--------------------------------------------------------------------------------
    ;常量段
    .const
    szString	db		"0123456789",0
    ;--------------------------------------------------------------------------------
    ;代码段
    .code
    
    start:
    		invoke	CreateFile,L("test.dat"),GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL
    		.if		eax == INVALID_HANDLE_VALUE
    				invoke	MessageBox,NULL,L("Create Files Fails"),L("Error"),MB_OK
    				jmp		@F
    		.endif
    		mov		hFile,eax
    		invoke	SetFilePointer,hFile,1024,NULL,FILE_CURRENT
    		.if		eax != NULL
    				invoke	MessageBox,NULL,L("Success"),L("Success"),MB_OK
    		.endif
    		invoke	WriteFile,hFile,addr szString,sizeof szString,addr dwBytes,NULL
    		invoke	SetEndOfFile,hFile
    		invoke	CloseHandle,hFile
    		@@:
    		invoke	ExitProcess,NULL
    ;--------------------------------------------------------------------------------
    end start  ;函数入口地址

     

     

     

    如果文件大小为1kb   那么Size On Disk 就为4kb   因为在我的电脑上  磁盘对齐粒度是4kb

     

    展开全文
  • C语言文件的定义,如何对文件进行操作,文件指针,如何定义指向文件的指针,通过文件指针对文件进行操作,文件应用举例,二进制文件相关操作,文件定位

    C语言文件的定义,如何对文件进行操作,文件指针,如何定义指向文件的指针,通过文件指针对文件进行操作,文件应用举例,二进制文件相关操作,文件定位

    一、什么是文件

    1、文件的定义:文件是相关信息的集合
    信息:
    文字、文件的扩展名为:txt,doc
    声音、文件的扩展名为:mp3,wav,wma
    图像、文件的扩展名为:bmp,jpg,gif
    视频、文件的扩展名为:AVI、mov、rmvb、rm、FLV、mp4、3GP
    2、文件的取名:
    主文件名.扩展名
    1234563.txt
    3、文件的分类(在C程序当中对文件的分类)
    A:文本文件(存放字符/文字的文件.txt)
    B:二进制文件(.data)把结构体的信息写入的文件被称为二进制文件

    二、C程序对文件的操作

    读操作:从文件里面把文件的内容取出来,并输出到屏幕(不会改变文件的内容)
    写操作:把一些内容往文件里面写入(会改变文件的内容)

    1、C程序对文件的操作

    C程序通过文件的指针并加上一些函数然后对文件进行操作的

    2、什么是文件指针

    文件指针:这个指针是用来存放文件的首地址。这个指针是专门用来指向文件的。

    3、如何来定义文件指针

    格式:

    FILE *指针名;
    

    比如:定义了一个指针为fp,这个指针以后只能指向文件,之后要把文件的首地址赋值给该指针

    FILE *fp;
    

    4、如何给文件指针赋予初值

    如何赋值:一般通过fopen这个函数对指针进行赋值
    fopen功能
    A:打开文件。
    B:同时会返回打开的那个文件的首地址。
    C:该函数实际上就是地址。
    格式

    fopen("要打开的文件名","打开方式");
    

    说明:
    1、打开方式是表明打开文件之后要读还是要写
    2、打开方式:

    r:要打开文件之后要读文件(read) 文本文件
    w:要打开文件之后要写文件(write) 覆盖
    a:要打开文件之后要追加文件(append) 把新的数据加到末尾
    rb:要打开二进制文件进行读
    wb:要打开二进制文件进行写

    如果打开方式中加了一个"b"就表示要对二进制文件进行操作
    在这里插入图片描述
    3、如果打开的文件名的路径当中含义 \ 的时候就要用双杠 \ \ 。

    fopen("c:\\chen\\My.txt","r");//打开My.txt这个文本文件进行读的操作。
    

    在这里插入图片描述
    使用文件指针
    打开文件

    FILE *fp;
    //fopen该函数返回的是文件的地址
    fp=fopen("要打开文件的名称。即包含文件名的路径","打开方式");
    

    关闭文件
    A:通过fopen函数能够打开文件,之后对文件进行操作。
    B:操作完毕之后,一定要关闭文件。
    C:格式:fclose(文件指针名);

    程序操作文件的一般格式:

    FILE *fp;//定义一个文件指针
    fp=fopen("打开文件名","打开方式");//把文件指针具体的去指向一个文件
    //然后对文件进行操作
    fclose(fp);//要关闭文件
    

    4、对文件操作的函数:

    1)fgetc函数
    功能:从fp所指向的文件里面读取出一个字符。 (r)
    格式:字符型变量=fget(fp); //fp是一个文件指针
    文件一定要以读的方式打开,之后指针会自动向后移动一个位置

    2)fputc函数:
    功能:从fp所指向的文件里面写入一个字符。 (w)
    格式:fputc(要写入的字符,fp);
    文件一定要以写的方式打开,之后指针会自动向后移动一个位置

    3)fgets函数:
    功能:从fp所指向的文件里面读取出来一个字符串
    格式:fgets(str,n,fp);它会读出n-1个字符,留一个字符为\0
    str:存放字符串的一个数组,n表示读取出来字符的个数,fp是文件的指针

    4)fputs函数
    功能:把字符串写入到fp和指向的文件当中去
    格式:fputs(str,fp);把str当中所有的字符写入到fp里面去

    5)专门用来对二进制文件进行操作
    A:fwrite函数
    功能:把一个结构体变量当中的信息以二进制的形式写入到指定的文件当中去
    格式:fwrite(&结构体变量名,sizeof(结构体类型),1,fp);
    B:fread函数
    功能:从fp所指向的文件当中读出一条信息,存放在一个结构体变量当中
    格式:fread(&结构体变量名,sizeof(结构体类型),1,fp);

    6) feof函数
    功能:判断指向文件的指针是否指向文件的末尾
    格式:feof(文件指针);返回1则代表指向了文件的末尾,返回0则代表没有指向文件末尾
    feof(fp);
    一般的用法:while(!feof(fp));
    //(!feof(fp))返回0则代表指向了文件的末尾,返回1则代表没有指向文件末尾

    三、对文件进行操作的案例

    1、对文件进行读取操作

    1)从文件当中读取一个字符
    ch=fgetc(fp); //表示从fp指向的文件当中指向一个字符 ,并存放到变量ch里面
    A:新建一个txt文件
    在这里插入图片描述
    B:

    #include<stdio.h> 
    void main(){
    	FILE *fp;
    	char ch; 
    	fp=fopen("c:\\chen\\My.txt","r");//要以读的方式打开一个文本文件,并让指针fp指向这个文件
    	ch=fgetc(fp); //表示从fp指向的文件当中指向一个字符 ,并存放到变量ch里面
    	printf("%c",ch); 
    	//一定要关闭文件
    	fclose(fp);
    }
    

    在这里插入图片描述
    2)如何从一个文件当中把所有的都读取出来
    当文件没有读完时反复的读取文件当中的字符
    A:如何判断一个文件指针是否到了末尾
    feof函数:能够判断指针是否到文件的末尾
    格式:feof(指向文件的指针);

     feof(fp);
    

    该函数返回值为0时没有到末尾
    如果返回值为1表示到了末尾
    一般:
    while(!feof(fp))//当不到末尾

    #include<stdio.h> 
    void main(){
    	FILE *fp;
    	char ch; 
    	//要以读的方式打开一个文本文件,并让指针fp指向这个文件
    	fp=fopen("c:\\chen\\My.txt","r");
    	while(!feof(fp)){//当不到文件末尾时就反复的读取	
    	ch=fgetc(fp); //表示从fp指向的文件当中指向一个字符 ,并存放到变量ch里面
    	printf("%c",ch); 
    	}
    	//一定要关闭文件
    	fclose(fp);
    }
    

    在这里插入图片描述

    2、对文件进行写的操作

    1)向文件当中写入单个字符
    A:创建一个文件
    在这里插入图片描述

    #include<stdio.h> 
    void main(){
    	FILE *fp;
    	char ch;
    	fp=fopen("c:\\chen\\You.txt","w");
    	ch='A';
    	fputc(ch,fp);
    	fclose(fp);
    }
    

    在这里插入图片描述
    2)向文件当中写入多个字符(覆盖)
    用户输入字符,然后将用户输入的字符写入到对应的文件当中

    #include<stdio.h> 
    void main(){
    	FILE *fp;
    	char ch[100];
    	fp=fopen("c:\\chen\\You.txt","w");//覆盖旧的字符
    	printf("请输入一个字符串:");
    	gets(ch); 
    	int i; 
    	for(i=0;ch[i];i++){
    		fputc(ch[i],fp);//将用户输入的文字写入到fp指向的文件当中 
    	}
    	fclose(fp);
    }
    

    在这里插入图片描述
    3)向文件当中写入多个字符(追加)
    在这里插入图片描述

    #include<stdio.h> 
    void main(){
    	FILE *fp;
    	char ch[100];
    	fp=fopen("c:\\chen\\You.txt","a");//a为追加
    	printf("请输入一个字符串:");
    	gets(ch); 
    	int i; 
    	for(i=0;ch[i];i++){
    		fputc(ch[i],fp);//将用户输入的文字写入到fp指向的文件当中 
    	}
    	fclose(fp);
    }
    

    在这里插入图片描述
    在这里插入图片描述
    3)fgets函数:的用法

    #include<stdio.h> 
    void main(){
    	FILE *fp;
    	char str[100];
    	fp=fopen("c:\\chen\\My.txt","r");//以读的方式将文件的地址值赋予指针fp
    	fgets(str,5,fp); //从fp指向的文件当中地区5个字符,放入到str字符数组当中 
    	puts(str);//输出字符数组 
    	fclose(fp);
    }
    

    fgets(str,f,np);它会读出n个字符,留一个字符为\0,所以器实际字符串的长度为n-1,读取出来的字符串为n-1个
    在这里插入图片描述
    4)fputs函数:的用法

    #include<stdio.h> 
    void main(){
    	FILE *fp;
    	char str[100]={"abcd1235"};
    	fp=fopen("c:\\chen\\My.txt","w");//以写的方式将文件的地址值赋予指针fp
    	fputs(str,fp);
    	fclose(fp);
    }
    

    在这里插入图片描述
    5)专门用来对二进制文件进行操作
    A:fwrite函数:的用法
    功能:把一个结构体变量当中的信息以二进制的形式写入到指定的文件当中去
    格式:fwrite(&结构体变量名,sizeof(结构体类型),1,fp);

    向文件当中输入单个结构体变量

    #include<stdio.h> 
    typedef struct worker{
    	char Id[10];
    	char Name[10];
    	int Age;
    }WOR;//结构体类型为WOR 
    void main(){
    	FILE *fp;
    	WOR w[5]={
    		{"w1","张三",34},
    		{"w2","李四",54},
    		{"w3","二狗",64},
    		{"w4","狗娃",74},
    		{"w5","小样",84}
    	};
    	fp=fopen("c:\\chen\\worker.data","wb");//以写入的方式打开一个二进制文件用fp指向该文件的首地址值 
    	fwrite(&w[0],sizeof(WOR),1,fp);//通过fwrite函数对文件进行写入 
    	fclose(fp);//关闭文件 
    }
    

    运行以后
    在这里插入图片描述
    在这里插入图片描述
    向文件当中输入多个结构体变量

    #include<stdio.h> 
    typedef struct worker{
    	char Id[10];
    	char Name[10];
    	int Age;
    }WOR;//结构体类型为WOR 
    void main(){
    	FILE *fp;
    	WOR w[5]={
    		{"w1","张三",34},
    		{"w2","李四",54},
    		{"w3","二狗",64},
    		{"w4","狗娃",74},
    		{"w5","小样",84}
    	};
    	int i; 
    	fp=fopen("c:\\chen\\worker.data","wb");//以写入的方式打开一个二进制文件用fp指向该文件的首地址值 
    	for(i=0;i<5;i++){
    		fwrite(&w[i],sizeof(WOR),1,fp);//通过fwrite函数对文件进行写入
    	}
    	fclose(fp);//关闭文件 
    }
    

    文件里面的样子
    在这里插入图片描述
    B:fread函数
    功能:从fp所指向的文件当中读出一条信息,存放在一个结构体变量当中
    格式:fread(&结构体变量名,sizeof(结构体类型),1,fp);
    从二进制文件当中读取单行内容

    #include<stdio.h> 
    typedef struct worker{
    	char Id[10];
    	char Name[10];
    	int Age;
    }WOR;//结构体类型为WOR 
    void main(){
    	WOR w; 
    	FILE *fp;
    	//打开一个二进制文件进行读
    	fp=fopen("c:\\chen\\worker.data","rb");
    	//将fp指向的二进制文件读取到的内容放入到结构w当中
    	fread(&w,sizeof(WOR),1,fp); 
    	printf("%s\t%s\t%d",w.Id,w.Name,w.Age);
    	fclose(fp);	 
    }
    

    在这里插入图片描述
    从二进制文件当中读取多行内容

    #include<stdio.h> 
    typedef struct worker{
    	char Id[10];
    	char Name[10];
    	int Age;
    }WOR;//结构体类型为WOR 
    void main(){
    	WOR w; 
    	FILE *fp;
    	fp=fopen("c:\\chen\\worker.data","rb");//打开一个二进制文件进行读
    	while(!feof(fp)){//判断文件的指针是否到达文件的末尾 
    		fread(&w,sizeof(WOR),1,fp);//将fp指向的二进制文件读取到的内容放入到结构w当中 
    		printf("%s\t%s\t%d\n",w.Id,w.Name,w.Age);
    	}
    	fclose(fp);	 
    }
    

    在这里插入图片描述

    四、文件定位

    1、文件指针的定位

    2、当文件刚刚打开的时候,文件指针会自动的指向文件的开头

    3、随着我们调用读写函数文件指针也会自动的向后移动

    在这里插入图片描述

    4、有时候为了编程需要,我们可能要通过程序手动的去移动文件指针

    5、文件定位函数:

    A:fseek函数
    功能:用来移动文件指针到文件的某一个位置
    格式:fseek(fp,移动的距离【位移量】,参考点【起始点】);

    参考点
    SEEK_SET:从文件的开始的位置
    SEEK_END:从文件的末尾
    SEEK_CUR:文件的当前位置

    位移量
    正数表示向文件的末尾移动
    为负数表示向文件的开头方向移动

    案例一、

    证明每次调用fgetc指针都会自动向后移动一位
    在这里插入图片描述

    #include<stdio.h> 
    #include<string.h>
    void main(){
    	FILE *fp;
    	char ch,ch1; 
    	//以读的方式打开文件,并将文件指针fp指向文件的开头
    	fp=fopen("c:\\chen\\My.txt","r"); 
    	ch=fgetc(fp);//表示从文件里面读取一个字符
    	ch1=fgetc(fp);//表示从文件里面读取一个字符
    	printf("%c,%c",ch,ch1); 
    	fclose(fp);
    }
    

    在这里插入图片描述

    案例二、

    SEEK_SET:从文件的开始的位置

    #include<stdio.h> 
    #include<string.h>
    void main(){
    	FILE *fp;
    	char ch; 
    	//以读的方式打开文件,并将文件指针fp指向文件的开头
    	fp=fopen("c:\\chen\\My.txt","r"); 
    	fseek(fp,2,SEEK_SET);
    	ch=fgetc(fp);//表示从文件里面读取一个字符
    	printf("%c",ch); 
    	fclose(fp);
    }
    

    fseek(fp,2,SEEK_SET);//表示以开始的位置(SEEK_SET)将指向文件的指针(fp)向后移动动两个位置

    在这里插入图片描述
    在这里插入图片描述
    改进上方算法练习
    SEEK_CUR:文件的当前位置

    #include<stdio.h> 
    #include<string.h>
    void main(){
    	FILE *fp;
    	char ch; 
    	//以读的方式打开文件,并将文件指针fp指向文件的开头
    	fp=fopen("c:\\chen\\My.txt","r"); 
    	fseek(fp,2,SEEK_SET);//表示以文件当前的位置开始为参考点向尾部移动2个单位  
    	ch=fgetc(fp);//表示从文件里面读取一个字符
    	printf("%c",ch); 
    	fseek(fp,1,SEEK_CUR);//以当前的位置为参考点,向后移动一个单位 
    	ch=fgetc(fp);//表示从文件里面读取一个字符
    	printf("%c",ch); 
    	fclose(fp);
    }
    

    在这里插入图片描述
    在这里插入图片描述
    改进上述算法
    SEEK_END:从文件的末尾

    #include<stdio.h> 
    #include<string.h>
    void main(){
    	FILE *fp;
    	char ch; 
    	//以读的方式打开文件,并将文件指针fp指向文件的开头
    	fp=fopen("c:\\chen\\My.txt","r"); 
    	fseek(fp,-2,SEEK_END);//表示以文件末尾的位置开始为参考点向头部移动2个单位  
    	ch=fgetc(fp);//表示从文件里面读取一个字符
    	printf("%c",ch); 
    	fclose(fp);
    }
    

    在这里插入图片描述
    在这里插入图片描述

    四、rewind函数:

    功能:把文件指针移动带开头
    格式:rewind(指向文件的指针);
    rewind(fp);相当于fseek(fp,0,SEEK_SET);//以文件开头文基准向后移一个单位

    #include<stdio.h> 
    #include<string.h>
    void main(){
    	FILE *fp;
    	char ch; 
    	//以读的方式打开文件,并将文件指针fp指向文件的开头
    	fp=fopen("c:\\chen\\My.txt","r"); 
    	ch=fgetc(fp);//表示从文件里面读取一个字符,并且指针会自动指向下一个位置 
    	printf("%c",ch); 
    	rewind(fp);会把指针移动到开头 
    	ch=fgetc(fp);//表示从文件里面读取一个字符,并且指针会自动指向下一个位置 
    	printf("%c",ch); 
    	rewind(fp);//要把指针移动到开头 
    	fclose(fp);
    }
    

    在这里插入图片描述

    #include<stdio.h> 
    #include<string.h>
    void main(){
    	FILE *fp;
    	char ch; 
    	//以读的方式打开文件,并将文件指针fp指向文件的开头
    	fp=fopen("c:\\chen\\My.txt","r"); 
    	ch=fgetc(fp);//表示从文件里面读取一个字符,并且指针会自动指向下一个位置 
    	printf("%c",ch); 
    	
    	
    	//rewind(fp);//会把指针移动到开头 
    	fseek(fp,0,SEEK_SET);//会把指针移动到开头 
    	
    	
    	ch=fgetc(fp);//表示从文件里面读取一个字符,并且指针会自动指向下一个位置 
    	printf("%c",ch); 
    	rewind(fp);//要把指针移动到开头 
    	fclose(fp);
    }
    

    在这里插入图片描述

    展开全文
  • 1 文件指针 文件指针是指向一个文件的指针,确切的是存放了用文件这个结构体所定义的对象的起始地址,文件指针的移动是指在文件之间来移动, 比如: FILE * fp; fp = fopen("/programe/test.txt","a+"); fp就表示...

    1 文件指针

    文件指针是指向一个文件的指针,确切的是存放了用文件这个结构体所定义的对象的起始地址,文件指针的移动是指在文件之间来移动,

    比如:

    FILE * fp;

    fp = fopen("/programe/test.txt","a+");

    fp就表示文件指针。

    问题:文件指针能不能在文件之间来回移动?

    如果能的话,需要先释放文件指针吗?

    如果不能的话,是为什么,是因为这个指针是指针常量吗?

    解答:简单程序进行测试

    1. #include <stdio.h>  
    2. #include <stdlib.h>  
    3.   
    4. int main()  
    5. {  
    6.   
    7. FILE * fp;  
    8. fp = fopen("/program/Demo.c","a+");  
    9. if(fp == NULL)  
    10. {  
    11.         return -1;  
    12. }  
    13. fprintf(fp,"hello world:Demo.c");  
    14. fp = fopen("/program/getcharDemo.c","a+");  
    15. if(fp == NULL)  
    16. {  
    17.         return -1;  
    18. }  
    19.   
    20. fprintf(fp,"hello world:getcharDemo.c");  
    21. fclose(fp);  

    一个指针先后指向两个不同的值,运行结果和程序预想的完全一致,在Demo.c和getcharDemo.c中的最后一行都分别输出了相应的值。

    说明在这一点上面文件指针和普通的指针是一致的。

    2 文件位置指针

    文件位置指针是指文件打开之后,在文件内部进行移动的指针。

    其数据类型是 fpos_t

    在MSDN上面是这样说的:

    fpos_t (long integer, __int64, or structure, depending on the target platform)依据平台架构可能是long型也可能是struct型

    copyright 1993-1999 by sunmicrosystem这样说:

    typedef long fpos_t

    typedef    long long   __longlong_t;
    typedef    __longlong_t  fpos_t

    经过32位Linux平台上面编码测试发现它的大小是 12个字节。这个pos_t的结构里面应该至少有一个字段表示的是距离文件起始位置的偏移量。


    C library reference中定义的文件位置指针的操作函数有以下这些:

    1 获取文件位置指针当前的位置。

      int fgetpos(FILE *stream, fpos_t *pos);

      int fsetpos(FILE *stream, const fpos_t *pos);

       移动文件位置指针:

      long int ftell(FILE *stream);

     int fseek(FILE *stream, long int offset, int whence);

    2 在函数执行过程中移动文件位置指针:

    size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

    size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);


    3 long int ftell(FILE *stream);获取当前位置到文件开头的字符数

    4 void rewind(FILE *stream); 文件位置指针返回到文件开头

    5 int fgetc(FILE *stream);

      int fputc(int char, FILE *stream);

    6 char *fgets(char *str, int n, FILE *stream);

      int fputs(const char *str, FILE *stream);

    fgets和fputs系列函数也在读完当前行之后,会把文件位置指针指向下一行的开始处。



    展开全文
  • 1 文件指针 文件指针是指向一个文件的指针,确切的将是指向用文件这个结构体所定义的对象的起始地址,文件指针的移动是指在文件之间来移动, 比如: FILE * fp; fp = fopen("/programe/test.txt","a+...

    1 文件指针

    文件指针是指向一个文件的指针,确切的将是指向用文件这个结构体所定义的对象的起始地址,文件指针的移动是指在文件之间来移动,

    比如:

    FILE * fp;

    fp = fopen("/programe/test.txt","a+");

    fp就表示文件指针。

    问题:文件指针能不能在文件之间来回移动?

    如果能的话,需要先释放文件指针吗?

    如果不能的话,是为什么,是因为这个指针是指针常量吗?

    解答:简单程序进行测试:

    [html] view plaincopy
    1. #include <stdio.h>  
    2. #include <stdlib.h>  
    3.   
    4. int main()  
    5. {  
    6.   
    7. FILE * fp;  
    8. fp = fopen("/program/Demo.c","a+");  
    9. if(fp == NULL)  
    10. {  
    11.         return -1;  
    12. }  
    13. fprintf(fp,"hello world:Demo.c");  
    14. fp = fopen("/program/getcharDemo.c","a+");  
    15. if(fp == NULL)  
    16. {  
    17.         return -1;  
    18. }  
    19.   
    20. fprintf(fp,"hello world:getcharDemo.c");  
    21. fclose(fp);  

    一个指针先后指向两个不同的值,运行结果和程序预想的完全一致,在Demo.c和getcharDemo.c中的最后一行都分别输出了相应的值。

    说明在这一点上面文件指针和普通的指针是一致的。

    2 文件位置指针

    文件位置指针是指文件打开之后,在文件内部进行移动的指针。

    其数据类型是 fpos_t

    在MSDN上面是这样说的:

    fpos_t (long integer, __int64, or structure, depending on the target platform)依据平台架构可能是long型也可能是struct型

    copyright 1993-1999 by sunmicrosystem这样说:

    typedef long fpos_t

    typedef    long long   __longlong_t;
    typedef    __longlong_t  fpos_t

    经过32位linux平台上面编码测试发现它的大小是 12个字节。这个pos_t的结构里面应该至少有一个字段表示的是距离文件起始位置的偏移量。


    C library reference中定义的文件位置指针的操作函数有以下这些:

    1 获取文件位置指针当前的位置。 

      int fgetpos(FILE *stream, fpos_t *pos);

      int fsetpos(FILE *stream, const fpos_t *pos);

       移动文件位置指针:

      long int ftell(FILE *stream);

     int fseek(FILE *stream, long int offset, int whence);

    2 在函数执行过程中移动文件位置指针:

    size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

    size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);


    long int ftell(FILE *stream);获取当前位置到文件开头的字符数

    void rewind(FILE *stream); 文件位置指针返回到文件开头

    int fgetc(FILE *stream);

      int fputc(int char, FILE *stream);

    char *fgets(char *str, int n, FILE *stream);

      int fputs(const char *str, FILE *stream);

    fgets和fputs系列函数也在读完当前行之后,会把文件位置指针指向下一行的开始处。


    展开全文
  • 1. 文件指针 我们大概已经知道该如何创建或者打开一个文件,用CreateFile函数可以轻松做到,还不了解的小伙伴,请穿越到http://www.cnblogs.com/bigsponge/articles/4936599.html CreateFile函数会使系统创建一个...
  • 文件描述符与文件指针的区别

    千次阅读 2017-05-08 20:32:48
    文件指针:C语言中使用文件指针做为I/O的句柄。文件指针指向进程用户区中的一个被称为FILE结构的数据结构。FILE结构包括缓冲区和文件描述符。而文件描述符是文件描述符表的一个索引,也就是说c语言的文件指针是Linux...
  • 1 文件指针文件指针是指向一个文件的指针,确切的将是指向用文件这个结构体所定义的对象的起始地址,文件指针的移动是指在文件之间来移动,比如:FILE * fp;fp = fopen("/programe/test.txt","a+");fp就表示文件指针...
  • Python文件指针

    千次阅读 2016-11-22 21:51:17
    实验文件data.txt如下:This file is data.txt ...实验一、文件指针初始化f = open('data.txt','r+') print f.tell() f.write('nice to meet you') f.flush() print f.tell() print f.read()相应输出: //print f.
  • 文件指针以及文件的打开与关闭

    千次阅读 2019-11-24 19:25:53
    文件指针 在C语言中用一个指针变量指向一个文件,这个指针称为文件指针。通过文件指针就可以对它所指的文件进行各种操作。 定义说明文件指针的一般形式是: FILE* 指针变量标识符; 其中FILE应该大写,它实际上是是...
  • php开发之文件指针,文件锁定

    千次阅读 2015-04-07 16:16:06
    (1) rewind() 函数 该函数将文件handle的指针设为文件流的开头,...fseek()函数实现文件指针的定位,语法如下: int fseek(resource handle,int offset[,int whence]) handle 参数为要打开的文件 offset为指针位
  • C语言文件指针

    千次阅读 2015-01-09 16:35:43
    定义说明文件指针的一般形式为:  FILE *指针变量标识符; 其中FILE应为大写,它实际上是由系统定义的一个结构,该结构中含有文件名、文件状态和文件当前位置等信息。在编写源程序时不必关心FILE结构的细节。例如...
  • 读取文件数据,也就是将文件指针置于文件头,可是运行时不是这样。 ifstream filein(strFileDir, ios::in | ios::binary); //校验和 int iVerify = 0; while (!filein.eof()) { char cByte = NULL; file...
  • C/C++:文件读写之文件指针定位

    万次阅读 2018-03-10 19:21:06
    文件读写时C/C++使用过程中最为常见也最为平凡的操作,其中一个比较重要的事情是对文件指针进行操作,例如重新读写文件(即将文件指针重新移动到文件开头)。 本博客主要介绍在C和C++中分别对文件指针进行操作。...
  • 文件指针、文件描述符、文件句柄

    千次阅读 2014-04-11 22:45:10
    文件指针、文件描述符、文件句柄 **文件指针 通俗的说,文件指针就是指向文件的指针变量,定义说明文件指针的一般形式为: FILE *指针变量标识符;其中FILE应为大写,它实际上是由系统定义的一个结构,该结构中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 823,774
精华内容 329,509
关键字:

文件指针