【C 语言】文件操作 ( ftell 函数 | 使用 ftell 函数获取当前指针位置 | 通过 ftell 计算文件大小 )
【摘要】
文章目录
一、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)