prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 19.11

Q如何检查文件是否存在?如果请求的输入文件丢失,我想警告用户。


A可靠且可移植地进行此判断出奇地困难。您进行的任何测试都可能失效,如果文件在您进行测试和尝试打开文件之间(例如,由其他进程)创建或删除。

三种可能的测试函数是stat, access,而fopen。(要使用fopen进行近似测试,只需打开读取然后立即关闭,尽管失败不一定表示不存在。)其中,只有fopen是广泛可移植的,而access,在存在的情况下,如果程序使用了 Unix set-UID 功能,则必须小心使用。(如果您有选择,最好的折衷可能是stat函数之一。)

与其提前预测像打开文件这样的操作是否会成功,不如尝试执行该操作,检查返回值,并在失败时抱怨。 (显然,这种方法不适用于您试图避免覆盖现有文件的情况,除非您有像O_EXCL文件打开选项那样可用的东西,这在这种情况下正是您想要的。)

参考:PCS Sec. 12 pp. 189,213
POSIX Sec. 5.3.1, Sec. 5.6.2, Sec. 5.6.3


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管