当前位置:C++技术网 > 资讯 > C语言文件操作详细分析:5 移动文件指针和C语言扩展文件大小

C语言文件操作详细分析:5 移动文件指针和C语言扩展文件大小

更新时间:2015-06-25 23:26:33浏览次数:1+次

fseek用于移动文件指针的位置,使下一次读取从移动到的新位置开始读取。移动文件指针可以读取文件的任何位置。
原型声明
int fseek( FILE *stream, long offset, int origin );

返回值
    成功返回0,否则返回的是非零值。如果设备无法寻址,那么返回的值就不确定。无法寻址的原因就是文件指针错误或者硬盘本身的故障。
第一个参数
    文件指针,由fopen函数返回的。
第二个参数
    从起点的偏移值。可以是正数,也可以是负数,也可以是零。如果是负数,则由文件尾向文件起始的方向偏移,如果是正数,则文件起始向文件尾的方向偏移。以字节为单位。
第三个参数

    偏移的起点。起点有三种方式,分别为SEEK_SET(0),SEEK_CUR(1)和SEEK_END(2),依次代表文件起始、文件指针当前位置和文件尾。这三个标志是预先定义的宏,当然你也可以直接传入对应的数。

特别说明

    第二个参数的偏移,就是以这个偏移的起点来计算的,比如SEEK_CUR,那么偏移的就是从当前的文件指针位置偏移,如果当前文件指针位于文件起始位置,第二个参数为负数,那么移动指针后就超出文件起始了。如果当前文件指针位于文件尾,第二个传入正数,那文件指针移动后超出文件尾了。一个是从文件尾向文件头方向越过文件起始位置,另一个就是反着的超出文件尾。但是两种结果不一样。

    越过文件起始超出文件,移动文件指针会失败。而越过文件尾超出文件,是可以的,且非常有用。经常使用越过文件尾来扩展文件大小,但是并不是越过文件尾就扩展了文件大小,还需要在越过文件尾后设置文件的文件尾才能是新文件大小生效。C语言中没有直接设置文件尾标志的函数,为了支持C语言扩展文件大小,我们移动指针后,然后在移动后的文件指针位置写入数据即可,那么就写入一个0.后文件大小就生效了。

C语言扩展文件大小的代码如下:
FILE * pFile = fopen("1.txt","w+");
int i = fseek(pFile,100000000,SEEK_END);
fwrite("2",1,1,pFile);
fclose(pFile);
    以上代码也展示了fseek函数的使用。打开文本文件1.txt,以w+方式打开,然后从文件尾开始移动文件指针,最后在新的位置写入一个字符2,然后关闭文件。
如果打开文件用于修改文件,移动的指针对于读和写都起作用。至于其他的关于文件指针的进一步了解,可以参看MSDN的解释。
    这里提醒一下,移动文件指针,推荐使用二进制文件方式打开,因为对于文本文件涉及到回车换行符的转换,因此对fseek函数的使用有限制,否则可能产生不可预期的错误。