C语言的文件随机访问fseek()和ftell()函数 |
您所在的位置:网站首页 › 随机函数c语言头文件 › C语言的文件随机访问fseek()和ftell()函数 |
C语言的文件随机访问fseek()和ftell()函数
我们要讨论3个问题:fseek()和ftell()函数的工作原理、如何使用二进制流、如何让程序可移植。 fseek()与ftell()的工作原理头文件:#include 定义函数:int fseek(FILE * stream, long offset, int whence); **函数说明:fseek()用来移动文件流的读写位置. ** 1.参数stream 为已打开的文件指针。 2.参数offset 是偏移量,该参数表示要从起始点开始要移动的距离,干参数必须是一个long类型的值,可以为正(前移),可以为负(向后移),或者为0(保持不动)。 3.参数 whence 是模式,该参数确定起始点。根据ANSI标准,在stdio.h头文件中规定了几个表示模式的**明示标量(manifest constant)。**如下表所示: 表1 文件的起始点模式 模式偏移量的起始点SEEK_SET文件开始处SEEK_CUT文件当前位置SEEK_END文件末尾旧的实现可能缺少这些定义,可以用数值0L、1L、2L分别表示这3中模式。L表明其值是long类型。 下面是调用fseek()函数的一些示例,fp是一个文件指针: fseek(fp, 0L, SEEK_SET); //定位至文件开始处 fseek(fp, 10L, SEEK_SET); //定位至文件中的第10个字节 fseek(fp, 2L, SEEK_CUR); //从文件当前位置前移2个字节 fseek(fp, 0L, SEEK_END); //定位至文件结尾 fseek(fp, -10, SEEK_END); //从文件结尾处回退10个字节对于这些调用还有一些限制,后面会讨论。如果一切正常,fseek函数的返回值为0;如果出现错误(例如试图移动的距离超出了文件的范围),其返回值是-1。 ftell() 函数用来获取文件读写指针的当前位置,其原型为: long ftell(FILE * stream); 【参数】stream 为已打开的文件指针。 【返回值】成功则返回当前的读写位置,失败返回 -1。 对于二进制文件,则返回从文件开头到结尾的字节数。 对于文本文件,返回的数值可能没有实际意义,但仍然可以用来保存当前的读写位置,供 fseek() 函数使用 在随机方式存取文件时,由于文件位置频繁的前后移动,程序不容易确定文件的当前位置。使用fseek函数后再调用函数ftell()就能非常容易地确定文件的当前位置。ftell() 经常和 fseek() 一起使用。 在最初的unix实现中,ftell()通过返回距文件开始处的字节数来确定文件的位置。文件的第1个字节到文件开始处的距离为0,以此类推。ANSI C规定,该定义适用于以二进制模式打开的文件,以文本文件打开的文件的情况不同。 下面来分析以下程序示例: /* reverse.c -- displays a file in reverse order */ #include #include #define CNTL_Z '\032' /* eof marker in DOS text files */ #define SLEN 81 int main(void) { char file[SLEN]; char ch; FILE *fp; long count, last; puts("Enter the name of the file to be processed:"); scanf("%80s", file); if ((fp = fopen(file,"rb")) == NULL) { /* read-only mode */ printf("reverse can't open %s\n", file); exit(EXIT_FAILURE); } fseek(fp, 0L, SEEK_END); /* go to end of file */ last = ftell(fp); for (count = 1L; count |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |