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)