20.14 怎样在读入文件前, 知道文件大小?

如果文件大小指的是你从 C 程序中可以读进的字符数量, 要得到这个精确的数字 可能困难或不可能。

Unix 系统函数 stat() 会给出准确的答案。有些系统提供了类似  Unix 的 stat() 函数, 但只返回一个近似值。你可以调用 fseek() 搜 索到文件尾, 再调用 ftell(), 或者调用 fstat(), 然而这些 方法都有同样的问题: fstat() 不可移植, 通常返回和 stat() 一样 的值; ftell() 并不保证可以返回字符计数, 除非是用于二进制文件, 但是, 严格来讲, 二进制文件并不一定支持 fseek 搜索到 SEEK_END。 某些系统提供 filesize() 或 filelength() 的函数, 但是它们明显 的不可移植。

你是否确定你必须预先知道文件大小?作为一个 C 程序最准确的方法 就是打开文件并读入, 也许可以重新整理代码, 使其边读入边计算文件大小。

参考资料: [ISO, Sec. 7.9.9.4]; [H&S, Sec. 15.5.1]; [PCS, Sec. 12 p. 213]; [POSIX, Sec. 5.6.2]。

翻译朱群英、孙云, LaTeX2HTML 编译 朱群英 (2005-06-23)