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 <filesystem>
#include <iostream>
int main() {
std::string filename = "example.txt";
if (std::filesystem::exists(filename)) {
std::cout << "文件存在\n";
} else {
std::cout << "文件不存在\n";
}
return 0;
}
编译时需启用 C++17 或更高标准,例如使用 g++:
g++ -std=c++17 your_file.cpp
使用 std::ifstream 打开文件
适用于所有C++标准,通过尝试以输入模式打开文件来判断是否存在。示例代码:
立即学习“C++免费学习笔记(深入)”;
#include <fstream>
#include <iostream>
#include <string>
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;
}
这种方法简单可靠,但注意它只能判断是否能读取,若文件存在但权限不足可能返回 false。
使用 POSIX access 函数(仅限 Unix/Linux)
在类 Unix 系统中,可以使用 access() 函数检查文件是否存在。示例代码:
立即学习“C++免费学习笔记(深入)”;
#include <unistd.h>
#include <iostream>
#include <string>
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;
}
F_OK 用于检查文件是否存在,R_OK、W_OK、X_OK 可分别检查读、写、执行权限。
使用 Windows API(仅限 Windows)
在 Windows 平台,可通过 GetFileAttributes 判断文件是否存在。示例代码:
立即学习“C++免费学习笔记(深入)”;
#include <windows.h>
#include <iostream>
#include <string>
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;
}
该方法适用于原生 Windows 开发环境。
基本上就这些常见方式。推荐优先使用 std::filesystem::exists(C++17+),跨平台且语义清晰。若受限于旧标准,可用 std::ifstream 方法,兼容性好,代码简洁。











