如何在C中无孔地获取文件大小

How to get file size without holes in C

所以我试图在 C 中获取文件的大小。

我知道在 C 中获取文件大小的两种方法,使用 stat 结构的 st_size 成员或在结构的开头和结尾之间使用 fseek文件。

但是,我担心 st_size 方法是否会报告文件的 "false size" 如果它有漏洞。 我想如果文件有漏洞,fseek 方法肯定会产生不正确的结果,对吗?

根据书 "Advanced Programming in the UNIX Environment" 的第 4.12 节,解决此问题的一种方法是将文件复制到内存中并从内存中读取其大小。但我无法弄清楚如何在 C 中执行此操作,所以我想知道您究竟是怎么做到的。

感谢任何帮助。

假设您的意思是 "holes" 在磁盘上存储文件数据的物理块之间 - 这些不算作文件的一部分,并且这两种方法都只会考虑适当的文件数据。在文件抽象中,没有"holes".