C语言 文件读写 ftell 函数

ChatGPT 3.5 国内中文镜像站免费使用啦

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门


一.ftell函数简介

C 语言函数 ftell 用于得到文件位置指针当前位置相对于文件首的偏移字节数,ftell 函数声明如下:


#include <stdio.h>
#include <stdlib.h>
/*
*描述:返回给定流 stream 的当前文件位置
*
*参数:
*   [in]  stream:文件指针句柄
*
*返回值:如果成功,该函数返回位置标识符的当前值;如果发生错误,则返回 -1L;
*/
long int ftell(FILE *stream);

二.ftell函数实战

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - C语言 文件读写 ftell 函数
//@Time:2021/07/24 07:30
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/

#include <stdio.h>
#include <stdlib.h>//fseek函数调用

int main()
{
    long position;
    char list[100];

    /*    rb+ 读写打开一个二进制文件,允许读数据。*/
    FILE * fp = fopen("a.txt", "rb+");

    if (fp == NULL) {
        printf("file error\n");
        exit(1);
    }

    fread(list,sizeof(char),100,stream);
    //get position after read
    position=ftell(stream);
    printf("Position after trying to read 100 bytes:%ld\n",position);

    fclose(stream);
    stream=NULL;
    return 0;
}

三.ftell函数经典使用

当我们不知道文件内容有多大的时候,使用 fread 不知道应该设置需要读取的元素数量,那么我们一般可以通过 ftell 函数获取当前文件的大小,然后在通过 fread 函数读取到缓冲区,示例代码如下:

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - C语言 文件读写 ftell 函数
//@Time:2021/07/24 07:30
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/

#include <stdio.h>
#include <stdlib.h>


int main()
{
    FILE *fp;
    int flen;
    char *p;

    /* 以只读方式打开文件 */
    if((fp = fopen ("1.txt","r"))==NULL)
    {
        printf("\nfile open error\n");
        exit(0);
    }

    fseek(fp,0L,SEEK_END); /* 定位到文件末尾 */
    flen=ftell(fp); /* 得到文件大小 */
    p=(char *)malloc(flen+1); /* 根据文件大小动态分配内存空间 */

    if(p==NULL)
    {
        fclose(fp);
        return 0;
    }

    fseek(fp,0L,SEEK_SET); /* 定位到文件开头 */
    fread(p,flen,1,fp); /* 一次性读取全部文件内容 */
    p[flen]='\0'; /* 字符串结束标志 */
    printf("%s",p);

    fclose(fp);
    free(p);
    return 0;
}

四.猜你喜欢

  1. C语言 数组下标越界和内存溢出区别
  2. C语言 使用指针遍历数组
  3. C语言 指针和数组区别
  4. C语言 指针数组和数组指针区别
  5. C语言 野指针
  6. C语言 函数值传递和址传递
  7. C语言 函数不定长参数
  8. C语言 函数指针
  9. C语言 指针函数
  10. C语言 回调函数 callback
  11. C语言 #pragma once
  12. C语言 #include <> 与 #include “” 区别
  13. C语言 const 修饰函数参数
  14. C语言 const 和 define 区别
  15. C语言 #运算符
  16. C语言 ##运算符
  17. C语言 __VA_ARGS__
  18. C语言 ##__VA_ARGS__
  19. C语言 函数不定长参数 ##__VA_ARGS__经典案例
  20. C语言 va_start / va_end / va_arg 自定义 printf 函数
  21. C语言 main 函数
  22. C语言 main 函数参数 main(int argc, char *argv[])
  23. C语言 局部变量
  24. C语言 全局变量
  25. C语言 全局变量和局部变量区别
  26. C语言 static
  27. C语言 extern

ChatGPT 3.5 国内中文镜像站免费使用啦
© 版权声明
THE END
喜欢就支持一下吧
点赞1 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容