c++如何判断文件是否存在 c++文件系统库filesystem【教程】
技术百科
尼克
发布时间:2026-01-18
浏览: 次 在C++17中,判断文件是否存在最直接推荐的方式是使用std::filesystem::exists(),需包含头文件、启用C++17及以上标准,并建议用namespace fs = std::filesystem简化书写。
在 C++17 中,标准库引入了 头文件,提供了跨平台的文件系统操作能力。判断文件是否存在,最直接、推荐的方式就是使用 std::filesystem::exists()。
使用 std::filesystem::exists()
这是最常用也最直观的方法。它返回一个 bool,表示路径所指的对象(文件、目录、符号链接等)是否存在且可访问。
- 需要包含头文件:
#include - 需启用 C++17 或更高标准(如编译时加
-std=c++17) - 注意命名空间:通常用
namespace fs = std::filesystem;简化书写
示例代码:
#include#include namespace fs = std::filesystem; int main() { std::string path = "test.txt"; if (fs::exists(path)) { std::cout << "文件存在\n"; } else { std::cout << "文件不存在\n"; } return 0; }
区分文件和目录:用 is_regular_file() 和 is_directory()
exists() 只告诉“存在”,但不说明类型。若你只关心“是不是普通文件”,应进一步判断:
-
fs::is_regular_file(path):确认是普通文件(非目录、非设备、非 socket 等) -
fs::is_directory(path):确认是目录 - 二者都隐式调用
exists(),所以无需先单独检查存在性
例如,严格判断“是否存在一个普通文件”:
if (fs::is_regular_file("data.csv")) {
std::cout << "data.csv 是一个普通文件\n";
}
处理异常与权限问题
exists() 在遇到无权限访问的路径(如某些系统目录)时,可能抛出 std::filesystem::filesystem_error。若程序需健壮运行,建议捕获异常:
try {
if (fs::exists("restricted/file.txt")) {
std::cout << "存在\n";
}
} catch (const fs::filesystem_error& e) {
std::cerr << "文件系统错误: " << e.what() << '\n';
}
如果不想处理异常,也可用带 std::error_code& 参数的重载版本,它不会抛异常,而是把错误信息写入 error_code 对象。
兼容旧版编译器或备用方案(不推荐)
若无法使用 C++17(如老项目限制),可考虑 POSIX 的 access()(Linux/macOS)或 Windows API 的 GetFileAttributes()。但这些不是跨平台的,且语义不如 filesystem 清晰,容易出错

# ai
# 是一个
# 这是
# 但不
# windows
# 不存在
# 错误信息
# 若无
# linux
# 对象
# macos
# c++
# 标准库
# stream
# Access
# 头文件
# 命名空间
# 抛出
# ios
# 文件系统
# bool
# Namespace
# 是否存在
# include
# Filesystem
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Win10怎样设置多显示器_Win10多显示器扩展
- Win10如何卸载自带Edge_Win10彻底卸载
- 如何在Golang中理解指针比较_Golang地址
- 如何使用Golang reflect检查方法数量_
- C++中的Pimpl idiom是什么,有什么好处
- Windows10无法连接到Internet_Wi
- Windows10怎么查看硬件信息_Windows
- 用Python构建微服务架构实践_FastAPI与
- Win11怎么更改盘符_Win11磁盘管理修改驱动
- Win11怎么关闭透明效果_Windows11辅助
- Win11怎么更改管理员名字 Win11修改账户名
- php485在php5.6下能用吗_php485旧
- Mac如何创建和管理多个桌面空间_Mac高效多任务
- Python技术债务管理_长期维护解析【教程】
- Windows10系统怎么查看IP地址_Win10
- Windows怎样拦截WPS弹窗广告_Window
- Windows的便笺功能如何使用?(桌面备忘技巧)
- php怎么下载安装后设置错误日志_phpini l
- Win11任务栏颜色怎么改_Win11自定义任务栏
- 如何使用Golang搭建Web开发环境_快速启动H
- 如何提升Golang JSON序列化性能_Gola
- Win11如何设置开机问候语 Win11修改登录界
- php删除数据怎么清空表_truncate与del
- Windows10系统怎么查看显卡驱动_Win10
- Win10路由器怎么隐藏ssid Win10隐藏w
- c++中如何使用auto关键字_c++11类型推导
- Win10怎样安装Excel数据分析工具_Win1
- 如何在 Go 中正确测试带 Cookie 的 HT
- Win11关机界面怎么改_Win11自定义关机画面
- 如何解决同一段404代码在不同主机上表现不一致的问
- Win11蓝牙开关不见了怎么办_Win11蓝牙驱动
- Win10文件历史记录怎么用 Win10开启自动备
- 如何使用Golang实现容器安全扫描_Golang
- Windows10如何更改桌面背景_Win10个性
- Win10电脑怎么设置网络名称_Windows10
- c# 在高并发下使用反射发射(Reflection
- 如何在Golang中使用time处理时间_Gola
- 如何在Golang中修改数组元素_通过指针实现原地
- php打包exe如何加密代码_防反编译保护方法【技
- Mac如何查看电池健康百分比_Mac系统信息电源检
- 如何在JavaScript中动态拼接PHP的bas
- php订单日志怎么记录发货_php记录订单发货操作
- 短链接还原php提示内存不足_调整PHP内存限制设
- Win11怎么关闭触摸键盘图标_Windows11
- Python装饰器复用技巧_通用能力解析【教程】
- Win11怎么更改计算机名_Windows11系统
- C++如何使用std::optional?(处理可
- Mac如何修复应用程序权限问题_Mac磁盘工具修复
- php嵌入式日志记录怎么实现_php将硬件数据写入
- 微信企业付款回调PHP怎么接收_处理企业付款异步通

QQ客服