Skip to content

获取文件信息

李述铜

752字约3分钟

2024-08-08

提示

同学,你好,欢迎学习本课程!本课程是介绍了FATFS文件系统模块的基本使用,是一门相对较简单的课程。

如果你对文件系统的实现比较感兴趣,也可以关注我的《从0到1写FAT32文件系统》课程。

欢迎转载本文章,转载请注明链接来源,谢谢!

FATFS提供了获取文件大小和当前位置等信息的接口。C语言中相关接口请见:

获取当前位置f_tell

如果要获取当前文件读写的位置,可以使用f_tell()函数。该函数接受一个指向打开文件对象的指针 fp 作为参数,并返回文件的当前读/写指针位置。

# 获取文件的当前读/写指针位置
FSIZE_t f_tell(
  FIL* fp   # [IN] 文件对象指针
)

该函数返回当前的读写位置,其值为相对于文件开头的字节偏移量。

获取文件大小f_size

如果想要获取文件大小,可以使用f_size()函数。。该函数接受一个指向打开文件对象的指针 fp 作为参数,并返回文件的大小。

FSIZE_t f_size (
  FIL* fp   /* [输入] 文件对象 */
);

该函数返回以字节为单位的文件大小。

判断是否到达文件尾部f_eof

在对文件操作的过程中,有时候可能想判断是否已经到达文件的尾部。此时可以使用f_eof()函数来实现。该函数接受一个指向打开文件对象的指针 fp 作为参数。

# 测试文件是否已到达文件末尾
int f_eof(
  FIL* fp   # [IN] 文件对象指针
)

如果当前读写位置是在文件尾部,则返回非0值;否则,返回0值。

检查文件上一次操作是否发生错误

如果想检查上一次调用文件相关的接口之后,文件操作是否发生了错误,则可以使用f_error函数。其函数原型如下:

int f_error (
  FIL* fp   /* [IN] 文件对象指针 */
);

函数参数

  • fp:指向已打开文件对象的指针。

返回值:

  • 如果发生严重错误,则返回一个非零值(其中保存了具体错误的原因);否则返回零。

注意事项

f_error的必要性

很多时候,由于f_read()等函数直接将操作的错误结果返回,因此可以立即取得执行的结果。f_error()就显得没有必要去使用。

但是在某些情况下,调用f_read()时其错误结果不会立即使用,或者这个结果需要被缓存。为了简化起见,可以直接使用f_error(),因为f_read()等函数内部实际会将操作结果保存在FIL结构内部,而f_error()就是直接取出这个缓存的结果。