有没有比简单地try 打开文件更好的方法呢?

int exists(const char *fname)
{
    FILE *file;
    if ((file = fopen(fname, "r")))
    {
        fclose(file);
        return 1;
    }
    return 0;
}

推荐答案

查找unistd.h中的access()函数.您可以将您的函数替换为

if( access( fname, F_OK ) == 0 ) {
    // file exists
} else {
    // file doesn't exist
}

您还可以使用R_OKW_OKX_OK来代替F_OK来判断读权限、写权限和执行权限(分别),而不是判断它们是否存在,您可以同时使用R_OKW_OKX_OK来判断读权限、写权限和执行权限(即使用R_OK|W_OK来判断读权限和写权限)

Update:请注意,在Windows上,您不能使用W_OK来可靠地测试写权限,因为访问函数没有考虑DACL.access( fname, W_OK )可能会返回0(成功),因为该文件没有设置只读属性,但您可能仍然没有写入该文件的权限.

C++相关问答推荐

Bison解析器转移/减少冲突

当包含头文件时,gcc会发出隐式函数声明警告

%p与char* 等组合缺少的GCC Wform警告

如何在C宏中确定Windows主目录?

C语言中的strstr问题

拥有3x3二维数组并访问数组[1][3]等同于数组[2][0]?

如何在ASM中访问C struct 成员

在循环中复制与删除相同条件代码的性能

用C语言计算文本文件中的整数个数

在for循环中指向数组开头之前

当b是无符号字符时,int a=(b<;<;2)>;>;2;和int a=b&;0x3F;之间有什么区别?

链表删除 node 错误

将数字的每一位数平方,并使用C将它们连接为一个数字(程序不能正确处理0)

宏观;S C调深度

在C中,为什么这个带有递增整数的main函数从不因溢出而崩溃?

在我的第一个C语言中观察到的错误';你好世界';程序

中位数和众数不正确

GnuCobol 使用 double 类型的参数调用 C 函数

Linux memcpy 限制关键字语法

为什么创建局部变量的指针需要过程在堆栈上分配空间?