C语言 文件读写 ftell 函数

Posted 猿说编程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 文件读写 ftell 函数相关的知识,希望对你有一定的参考价值。

目录

零基础 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

未经允许不得转载:猿说编程 » C 语言 文件读写 ftell 函数

本文由博客 - 猿说编程 猿说编程 发布!

C 语言文件操作 ( ftell 函数 | 使用 ftell 函数获取当前指针位置 | 通过 ftell 计算文件大小 )





一、ftell 函数



ftell() 函数的作用是 获取文件的 当前指针位置 相对于 文件首地址偏移字节数 ;


ftell 函数原型 :

#include <stdio.h>
long ftell(FILE *stream);

ftell 使用场景 : 随机方式存取文件时 , 使用 fseek 函数来回移动指针 , 不容易确定当前指针位置 , 通过调用 ftell 函数确定指针位置 ;





二、使用 ftell 函数获取当前指针位置



代码示例 :

  • 第一次打印指针位置 : 刚打开文件 , 还未读取数据 , 指针指向 0 位置 , 索引 0 ;
  • 第二次打印指针位置 : 跳过了 4 字节数据 , 偏移了 4 字节 , 指针指向第 5 字节 , 索引 4 ;
  • 第三次打印指针位置 : 跳过了 4 字节数据 , 又向后读取 2 字节 , 偏移了 6 字节 , 指向第七字节 , 索引 6 ;
#include <stdio.h>

int main()

    // 以写文本的方式向文件中写出数据
    FILE *p = fopen("D:/File/number.dat", "w");
    // 写出 10 个字符
    char array[10] = 1,2,3,4,5,6,7,8,9,10;
    // 将 10 个字符写出到文件中
    fwrite(array, 1, sizeof(array), p);
    // 关闭文件
    fclose(p);




    // 跳过 4 字节读取文件 2 字节
    FILE *p2 = fopen("D:/File/number.dat", "r");

    // 使用 ftell 函数获取当前指针位置
    int location = ftell(p2);
    // 刚打开文件 , 还未读取数据 , 指针指向 0 位置 ★★★
    printf("location = %d\\n", location);

    // 读取数据缓冲区
    char array2[2];

    // 跳过 4 字节 , 此时当前位置是 0
    fseek(p2, 4, SEEK_CUR);

    // 使用 ftell 函数获取当前指针位置
    location = ftell(p2);
    // 跳过了 4 字节数据 , 偏移了 4 字节 ,
    // 指针指向第 5 字节 , 索引 4 ★★★
    printf("location = %d\\n", location);

    // 读取 2 字节
    fread(array2, 1, sizeof(array2), p2);
    // 打印前 2 字节数据
    printf("%d , %d\\n", array2[0], array2[1]);

    // 使用 ftell 函数获取当前指针位置
    location = ftell(p2);
    // 跳过了 4 字节数据 , 又向后读取 2 字节 ,
    // 偏移了 6 字节 , 指向第七字节 , 索引 6 ★★★
    printf("location = %d\\n", location);

    return 0;


执行结果 :





三、通过 ftell 计算文件大小



代码示例 : 打开文件后 , 直接使用 fseek 跳转到文件末尾 , 然后使用 ftell 获取当前指针 , 打印出指针位置 , 即可获取文件大小 ;

#include <stdio.h>

int main()

    // 以写文本的方式向文件中写出数据
    FILE *p = fopen("D:/File/number.dat", "w");
    // 写出 10 个字符
    char array[10] = 1,2,3,4,5,6,7,8,9,10;
    // 将 10 个字符写出到文件中
    fwrite(array, 1, sizeof(array), p);
    // 关闭文件
    fclose(p);




    // 先打开文件
    FILE *p2 = fopen("D:/File/number.dat", "r");

    // 将文件指针移动到文件末尾
    fseek(p2, 0, SEEK_END);

    // 使用 ftell 函数获取当前指针位置
    int location = ftell(p2);

    // 通过读取当前文件指针位置, 即可获取文件大小 ★★★
    printf("filesize = %d\\n", location);

    // 将文件指针恢复
    fseek(p2, 0, SEEK_SET);

    // 使用 ftell 函数获取当前指针位置
    location = ftell(p2);

    // 查看指针是否恢复 ★★★
    printf("location = %d\\n", location);

    return 0;


执行结果 :

以上是关于C语言 文件读写 ftell 函数的主要内容,如果未能解决你的问题,请参考以下文章

C语言文件操作详解

C语言文件操作详解

C++怎么把文件按照16进制进行读写?

C语言进阶文件操作

C语言文件操作

C语言文件操作