精华内容
下载资源
问答
  • 近用c语言做文件操作比较频繁,记几个常用的操作 获得文件大小: fseek(fp, 0, SEEK_END); int fileSize = ftell(fp); rewind(fp); 读取指定位置的数据块: fseek( fp,offset,SEEK_SET ); int num_read = ...
     
    

    近用c语言做文件操作比较频繁,记几个常用的操作

    获得文件大小:

    fseek(fp, 0, SEEK_END);
    int fileSize = ftell(fp);
    rewind(fp);

    读取指定位置的数据块:

    fseek( fp,offset,SEEK_SET );
    int num_read = fread(buf, 1, length, fp);

    删除文件

    int res = access( filename,0 ); // 判断文件是否存在
    if ( res == 0 )
    {
       res = remove( filename );// 删除文件
       return ( res ==0 );
    }

    在指定位置写入块数据:

    fseek( fp, offset, SEEK_SET );
    num_write = fwrite( buf, 1, n, fp );

    打开文件方式中有一个比较特别的,如果 某文件中已经有了一部分数据,你需要继续在上面添加数据,但是是在指定位置添加,也就是说,仍然需要通过 fseek 找到写入位置,然后再 fwrite,这时候需要以 "rb+" 方式打开。而不能以"a"或者"ab+"方式。以"a"方式打开,fseek函数不起作用。

    获得文件属性

    struct stat st;
       FILE *fp = fopen( filename.c_str(),"rb" );
       if ( !fp )
       { // error
       }
       fstat( fp->_file, &st );

    遍历目录

    std::string dirspec = dir + "\\*.*";
    struct _finddata_t filefind;
    int done = 0;
    intptr_t handle = 0;

    if( ( handle = _findfirst(dirspec.c_str(),&filefind) ) == -1 )
       return IVS_FAIL;

    IVS_RESULT res = IVS_OK, response =IVS_OK;
    while( !(done=_findnext(handle,&filefind)) )   
    {   
       if( !strcmp(filefind.name,"..") || !strcmp(filefind.name,".") )
        continue;  

       AdsFileInfo info;
       if((_A_SUBDIR==filefind.attrib))   
       {               
        info._filename = filefind.name;
        info._fileSize = filefind.size;
        info._atime = filefind.time_access;
        info._ctime = filefind.time_create;
        info._mtime = filefind.time_write;
        info._isdir = true;
       }   
       else     
       {   
        std::string tmpFilename = dir + "\\";
        tmpFilename += filefind.name;
        res = getFileInfo( tmpFilename, info );
        response = (!SUCCESS(res))?res: response; 
       } 
       list.push_back( info );
    }           
    _findclose(handle);  


    转载地址:http://hi.baidu.com/wangleitongxing/blog/item/5ca7350e69a529236159f337.html



    展开全文
  • 不通过附加文件获取数据类型指针.rar 不通过附加文件获取数据类型指针.rar 不通过附加文件获取数据类型指针.rar 不通过附加文件获取数据类型指针.rar 不通过附加文件获取数据类型指针.rar 不通过附加文件获取...
  • 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);
    }
    

    在这里插入图片描述

    展开全文
  • 易语言不通过附加文件获取数据类型指针源码,不通过附加文件获取数据类型指针,取整数型指针,取文本型指针,取字节集型指针
  • 易语言不通过附加文件获取数据类型指针.rar 易语言不通过附加文件获取数据类型指针.rar 易语言不通过附加文件获取数据类型指针.rar 易语言不通过附加文件获取数据类型指针.rar 易语言不通过附加文件获取数据类型...
  • C++ 移动和获取文件读写指针

    千次阅读 2020-03-18 08:54:17
    在读写文件时,有时希望直接跳到文件中的某处开始读写,这就需要先将文件的读写指针指向该处,然后再进行读写。 ifstream 类和 fstream 类有 seekg 成员函数,可以设置文件指针的位置; ofstream 类和 fstream...

    在读写文件时,有时希望直接跳到文件中的某处开始读写,这就需要先将文件的读写指针指向该处,然后再进行读写。

    	ifstream 类和 fstream 类有 seekg 成员函数,可以设置文件读指针的位置;
    	
    	ofstream 类和 fstream 类有 seekp 成员函数,可以设置文件写指针的位置。
    

    所谓“位置”,就是指距离文件开头有多少个字节。文件开头的位置是 0。

    这两个函数的原型如下:

    ostream & seekp (int offset, int mode);
    istream & seekg (int offset, int mode);
    

    mode 代表文件读写指针的设置模式,有以下三种选项:
    1 . ios::beg:让文件读指针(或写指针)指向从文件开始向后的 offset 字节处。offset 等于 0 即代表文件开头。在此情况下,offset 只能是非负数。

    2 . ios::cur:在此情况下,offset 为负数则表示将读指针(或写指针)从当前位置朝文件开头方向移动 offset 字节,为正数则表示将读指针(或写指针)从当前位置朝文件尾部移动 offset字节,为 0 则不移动。

    3 . ios::end:让文件读指针(或写指针)指向从文件结尾往前的 |offset|(offset 的绝对值)字节处。在此情况下,offset 只能是 0 或者负数。

    此外,我们还可以得到当前读写指针的具体位置:

    	ifstream 类和 fstream 类还有 tellg 成员函数,能够返回文件读指针的位置;
    	
    	ofstream 类和 fstream 类还有 tellp 成员函数,能够返回文件写指针的位置。
    

    这两个成员函数的原型如下:

    int tellg();
    int tellp();
    

    要获取文件长度,可以用 seekg 函数将文件读指针定位到文件尾部,再用 tellg 函数获取文件读指针的位置,此位置即为文件长度。

    假设学生记录文件 students.dat 是按照姓名排好序的,编写程序,在 students.dat 文件中用折半查找的方法找到姓名为 Jack 的学生记录,并将其年龄改为 20(假设文件很大,无法全部读入内存)。程序如下:

    #include <iostream>
    #include <fstream>
    #include <cstring>
    using namespace std;
    class CStudent
    {
        public:
            char szName[20];
            int age;
    };
    int main()
    {
        CStudent s;       
        fstream ioFile("students.dat", ios::in|ios::out);//用既读又写的方式打开
        if(!ioFile) {
            cout << "error" ;
            return 0;
        }
        ioFile.seekg(0,ios::end); //定位读指针到文件尾部,
                                  //以便用以后tellg 获取文件长度
        int L = 0,R; // L是折半查找范围内第一个记录的序号
                      // R是折半查找范围内最后一个记录的序号
        R = ioFile.tellg() / sizeof(CStudent) - 1;
        //首次查找范围的最后一个记录的序号就是: 记录总数- 1
        do {
            int mid = (L + R)/2; //要用查找范围正中的记录和待查找的名字比对
            ioFile.seekg(mid *sizeof(CStudent),ios::beg); //定位到正中的记录
            ioFile.read((char *)&s, sizeof(s));
            int tmp = strcmp( s.szName,"Jack");
            if(tmp == 0) { //找到了
                s.age = 20;
                ioFile.seekp(mid*sizeof(CStudent),ios::beg);
                ioFile.write((char*)&s, sizeof(s));
                break;
            }
            else if (tmp > 0) //继续到前一半查找
                R = mid - 1 ;
            else  //继续到后一半查找
                L = mid + 1;
        }while(L <= R);
        ioFile.close();
        return 0;
    }
    
    展开全文
  • 易语言源码不通过附加文件获取数据类型指针.rar 易语言源码不通过附加文件获取数据类型指针.rar 易语言源码不通过附加文件获取数据类型指针.rar 易语言源码不通过附加文件获取数据类型指针.rar 易语言源码不通过...
  • 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系列函数也在读完当前行之后,会把文件位置指针指向下一行的开始处。



    展开全文
  • #include #include #include //ftell 获取文件位置 //fseek 把文件指针移动到指定位置 int main(int argc,char *argv[]) { FILE *fp; if(argc !=2) { printf("usage %s <filenam
  • 不通过附加文件获取数据类型指针
  • 获取文件路径报空指针

    千次阅读 2016-01-06 10:43:58
    String filePath =request.getSession()....提示这行代码报空指针。 总代码是这样的: //得到文件夹路径 String filePath1 = request.getSession().getServletContext().getRealPath("/"); String fi
  • 1 文件指针 文件指针是指向一个文件的指针,确切的将是指向用文件这个结构体所定义的对象的起始地址,文件指针的移动是指在文件之间来移动, 比如: FILE * fp; fp = fopen("/programe/test.txt","a+...
  • fseek函数是 用来设定文件的当前读写位置. 函数原型: int fseek(FILE *fp,long offset,int origin);...参数: fp:文件指针;    offset:相对于origin规定的偏移位置量;    origin:表示指针移动的起
  • 看到别人通过获取指针的方式都是通过调用一个外部DLL,其实没有必要,我们的系统DLL就提供了这个功能。
  • IAR程序中获取指针与栈指针

    千次阅读 2015-09-18 16:11:02
    IAR在程序中获取指针和栈指针
  • 文件指针

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

    2017-11-16 17:15:58
    先用fopen打开文件,然后将文件指针指向文件末尾, ...再用ftell获取文件指针的位置,即文件大小。 FILE *fp = fopen(pFilePath,"r"); if (fp) { fseek(fp,0,SEEK_END); long lFileSize = ftell(fp); fclose(fp); }
  • 解决java[反射]获取文件路径出现空指针异常 必须把文件放在 src 下面 . 获取src文件的路径: URL url = HelloWorld.class.getClassLoader().getResource("HelloWorld.xml"); System.out.println(url....
  • 1 文件指针文件指针是指向一个文件的指针,确切的将是指向用文件这个结构体所定义的对象的起始地址,文件指针的移动是指在文件之间来移动,比如:FILE * fp;fp = fopen("/programe/test.txt","a+");fp就表示文件指针...
  • 资源介绍: 看到别人通过获取指针的方式都是通过调用一个外部DLL,其实没有必要,我们的系统DLL就提供了这个功能。
  • MFC获取指针.doc

    2015-09-22 20:33:32
    MFC获取指针.mfc框架中各个文件中函数的调用所必需的的指针
  • 文件描述符fd与文件指针FILE*的关系

    千次阅读 2017-04-27 13:56:11
    文件指针是指向一个FILE的结构体,这个结构体里包括一个文件描述符(在Windows下也被称为文件句柄)和一个I/O缓冲区。文件描述符用于ANSI C标准的IO库调用中,用于标识文件。FILE中包含文件描述符元素,可以用fopen...
  • 文件描述符&文件指针

    千次阅读 2017-01-19 17:43:05
    我们知道在linux下一切皆文件文件描述符是OS为了高效的管理已经被打开的文件所创建的一个索引,它是一个很小的正整数,所有执行I/O操作的系统调用都是通过文件描述符来实现的。  我们知道一个进程的创建一定会...
  • VC获取各类指针

    千次阅读 2009-12-13 06:27:00
    1、获取应用程序指针 CMyApp* pApp=(CMyApp*)AfxGetApp();2、获取主框架指针 CWinApp 中的公有成员变量 m_pMainWnd 就是主框架的指针 CMainFrame* pMainFrame = (CMainFrame*)(AfxGetApp()->m_pMainWnd); 或者 ...
  • linux下的文件标述符和文件指针
  • //却可以 MAKEINTRESOURCE这应该是dll文件里面的函数列表 第一个函数就是“print”第二函数print2就是MAKEINTRESOURCE(2); ..... ..... 那么问题就是 第一种方式为啥不行???????????(字符集是多字节...
  • 那么我们在用各个函数对所谓的“文件指针”进行操作时,本质上是不是函数通过获取文件指针所指向的文件信息内部的数据,才进行真正意义上的文件操作的吧?比方说读写时候的文件内部的那个一位一位移动的指针其实是...
  • //中间有读写文件操作 int i; i = file.tellg(); file >> str1; file.seekg(i); file >> str2; ``` 请问 这两个 str为什么不一样 我确认 在file>>str1和file>>str2这两个语句之前 seekg() 返回的值是一样的

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 338,951
精华内容 135,580
关键字:

获取文件指针