20.13 怎樣檢驗一個文件是否存在?

要做到可靠而可移植的檢驗出乎意料的困難。如果從你檢驗到你打開文件前, 這個文件被 (別的進程) 生成或刪除了, 所做的任何檢驗都會失效。

三個可能用作檢驗的函數是 stat(), access() 和 fopen()。 當使用 fopen() 作近似檢驗時, 用只讀打開, 然後馬上關閉, 但是 失敗並不代表不存在。這裡, 只有 fopen() 據有廣泛的可移植性, 如果系統提供 access, 而程序用了 Unix 的 UID 設置 特性, 要特別小心使用。

不要去預測像打開文件這類操作是否成功, 通常直接嘗試再 查驗返回值會更好, 如果 失敗了再申訴。當然, 如果你要避免複寫已存在的文件, 這 個方法並不適用, 除非 打開文件有象 O_EXCL 的參數, 那就可以做到你所要的效果。

參考資料: [PCS, Sec. 12 pp. 189,213]; [POSIX, ec. 5.3.1, Sec. 5.6.2, Sec. 5.6.3.]。

翻譯朱群英、孫雲, LaTeX2HTML 編譯 朱群英 (2005-06-23)