有没有比简单地尝试打开文件更好的方法?
int exists(const char *fname) { FILE *file; if ((file = fopen(fname, "r"))) { fclose(file); return 1; } return 0; }
查找access()函数,在unistd.h. 您可以将您的功能替换为
access()
unistd.h
if( access( fname, F_OK ) == 0 ) { // file exists } else { // file doesn't exist }
您还可以使用R_OK,W_OK和X_OK代替F_OK来检查读取权限,写入权限和执行权限(分别)而不是存在,您可以将它们中的任何一个放在一起(即使用 来检查读取 和 写入权限R_OK|W_OK)
R_OK
W_OK
X_OK
F_OK
R_OK|W_OK
更新 :请注意,在 Windows 上,您不能使用W_OK可靠地测试写入权限,因为访问功能不考虑 DACL。access( fname, W_OK )可能会返回 0(成功),因为该文件没有设置只读属性,但您仍然可能没有写入该文件的权限。
access( fname, W_OK )