18.5在C语言中,怎样检验文件是否存在?
要做到可靠而可移植的检验出乎意料的困难。如果从你检验到你打开文件前,这个文件被(别的进程) 生成或删除了, 所做的任何检验都会失效。
三个可能用作检验的函数是stat(), access() 和fopen()。当使用fopen() 作近似检验时, 用只读打开, 然后马上关闭, 但是失败并不代表不存在。这里, 只有fopen() 据有广泛的可移植性, 如果系统提供access, 而程序用了Unix 的UID 设置特性, 要特别小心使用。
不要去预测像打开文件这类操作是否成功, 通常直接尝试再查验返回值会更好, 如果失败了再申诉。当然, 如果你要避免复写已存在的文件, 这个方法并不适用, 除非打开文件有象O EXCL 的参数, 那就可以做到你所要的效果。
三个可能用作检验的函数是stat(), access() 和fopen()。当使用fopen() 作近似检验时, 用只读打开, 然后马上关闭, 但是失败并不代表不存在。这里, 只有fopen() 据有广泛的可移植性, 如果系统提供access, 而程序用了Unix 的UID 设置特性, 要特别小心使用。
不要去预测像打开文件这类操作是否成功, 通常直接尝试再查验返回值会更好, 如果失败了再申诉。当然, 如果你要避免复写已存在的文件, 这个方法并不适用, 除非打开文件有象O EXCL 的参数, 那就可以做到你所要的效果。