You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用fcntl.h的open():如何不创建文件判断文件是否存在?

解决文件存在性判断问题(不创建文件)

你的核心问题是误用了O_CREAT | O_EXCL标志——这个组合的作用是强制创建新文件,若文件已存在则open调用失败,完全和你要的“判断文件是否存在”逻辑相反,还会在文件不存在时自动创建它,导致后续误判。

要实现不创建文件就判断存在性,只需改用只读模式打开文件,去掉所有创建类的标志:

int fd;
// 以只读方式尝试打开文件,不创建新文件
fd = open(path, O_RDONLY);
if (fd == -1) {
    free(path);
    Error("File Not Found!");
}
// 后续可通过fd读取文件内容,操作完成后记得调用close(fd);

补充说明:

  • O_RDONLY是<fcntl.h>中定义的标准标志,仅请求打开文件进行读取操作,如果文件不存在,open会直接返回-1,不会生成任何新文件。
  • 如果需要更严谨的错误区分(比如区分“文件不存在”和“权限不足”等其他错误),可以结合errno判断(需包含<errno.h>,CentOS环境默认支持):
#include <errno.h>

int fd;
fd = open(path, O_RDONLY);
if (fd == -1) {
    free(path);
    if (errno == ENOENT) {
        Error("File Not Found!");
    } else {
        Error("Failed to open file: Permission denied or other error!");
    }
}

内容的提问来源于stack exchange,提问作者eladgl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 11:50:34