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)