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

举报
韩曙亮 发表于 2022/01/11 01:33:12 2022/01/11
【摘要】 文章目录 一、ftell 函数二、使用 ftell 函数获取当前指针位置三、通过 ftell 计算文件大小 一、ftell 函数 ftell() 函数的作用是 获取...





一、ftell 函数



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


ftell 函数原型 :

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

  
 
  • 1
  • 2

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;
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50

执行结果 :

在这里插入图片描述





三、通过 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;
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

执行结果 :

在这里插入图片描述

文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。

原文链接:hanshuliang.blog.csdn.net/article/details/121366398

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。