C++中判断文件是否存在的常用方法包括:① C++17的std::filesystem::exists,跨平台且简洁;② std::ifstream尝试打开文件,适用于所有标准;③ Unix系统使用access函数;④ Windows平台调用GetFileAttributes。推荐优先使用std::filesystem。

在C++中判断文件是否存在,有多种方法,具体选择取决于你使用的C++标准版本和平台。以下是几种常用且有效的方式。
使用 std::filesystem(C++17 及以上)
C++17 引入了 std::filesystem,提供了简洁直观的接口来检查文件是否存在。示例代码:
立即学习“C++免费学习笔记(深入)”;
#include编译时需启用 C++17 或更高标准,例如使用 g++:#include int main() { std::string filename = "example.txt"; if (std::filesystem::exists(filename)) { std::cout << "文件存在\n"; } else { std::cout << "文件不存在\n"; } return 0; }
g++ -std=c++17 your_file.cpp
使用 std::ifstream 打开文件
适用于所有C++标准,通过尝试以输入模式打开文件来判断是否存在。示例代码:
立即学习“C++免费学习笔记(深入)”;
#include这种方法简单可靠,但注意它只能判断是否能读取,若文件存在但权限不足可能返回 false。#include #include bool fileExists(const std::string& filename) { std::ifstream file(filename); return file.is_open(); } int main() { if (fileExists("example.txt")) { std::cout << "文件存在\n"; } else { std::cout << "文件不存在\n"; } return 0; }
使用 POSIX access 函数(仅限 Unix/Linux)
在类 Unix 系统中,可以使用 access() 函数检查文件是否存在。示例代码:
立即学习“C++免费学习笔记(深入)”;
#includeF_OK 用于检查文件是否存在,R_OK、W_OK、X_OK 可分别检查读、写、执行权限。#include #include bool fileExists(const std::string& filename) { return access(filename.c_str(), F_OK) == 0; } int main() { if (fileExists("example.txt")) { std::cout << "文件存在\n"; } else { std::cout << "文件不存在\n"; } return 0; }
使用 Windows API(仅限 Windows)
在 Windows 平台,可通过 GetFileAttributes 判断文件是否存在。示例代码:
立即学习“C++免费学习笔记(深入)”;
#include该方法适用于原生 Windows 开发环境。#include #include bool fileExists(const std::string& filename) { DWORD attr = GetFileAttributesA(filename.c_str()); return (attr != INVALID_FILE_ATTRIBUTES); } int main() { if (fileExists("example.txt")) { std::cout << "文件存在\n"; } else { std::cout << "文件不存在\n"; } return 0; }
基本上就这些常见方式。推荐优先使用 std::filesystem::exists(C++17+),跨平台且语义清晰。若受限于旧标准,可用 std::ifstream 方法,兼容性好,代码简洁。











