std::experimental::filesystem:: exists
From cppreference.net
<
cpp
|
experimental
|
fs
|
定义于头文件
<experimental/filesystem>
|
||
|
bool
exists
(
file_status s
)
|
(1) | (filesystem TS) |
|
bool
exists
(
const
path
&
p
)
;
bool exists ( const path & p, error_code & ec ) |
(2) | (filesystem TS) |
检查给定的文件状态或路径是否对应存在的文件或目录。
1)
等价于
status_known
(
s
)
&&
s.
type
(
)
!
=
file_type
::
not_found
。
2)
等价于
exists
(
status
(
p
)
)
或
exists
(
status
(
p, ec
)
)
(符号链接会被跟踪)。非抛出重载在出现错误时返回
false
。
目录 |
参数
| s | - | 要检查的文件状态 |
| p | - | 要检查的路径 |
| ec | - | 非抛出重载中用于错误报告的输出参数 |
返回值
true 如果给定路径或文件状态对应已存在的文件或目录, false 则表示其他情况。
异常
1)
noexcept
规范:
noexcept
2)
不接受
error_code
&
参数的重载版本在底层操作系统 API 出错时会抛出
filesystem_error
异常,该异常以
p
作为第一参数,操作系统错误代码作为错误码参数构造。若内存分配失败则可能抛出
std::
bad_alloc
。接受
error_code
&
参数的重载版本在操作系统 API 调用失败时将其设置为对应的错误码,若无错误发生则执行
ec.
clear
(
)
。此重载版本具有
noexcept
规范:
noexcept
备注
该函数提供的信息通常也会作为目录迭代的副产品被获取。在目录迭代过程中,调用
exists(*iterator)
的效率低于调用
exists(iterator->status())
。
示例
运行此代码
#include <cstdint> #include <experimental/filesystem> #include <fstream> #include <iostream> namespace fs = std::experimental::filesystem; void demo_exists(const fs::path& p, fs::file_status s = fs::file_status{}) { std::cout << p; if (fs::status_known(s) ? fs::exists(s) : fs::exists(p)) std::cout << " exists\n"; else std::cout << " does not exist\n"; } int main() { fs::create_directory("sandbox"); std::ofstream("sandbox/file"); // 创建常规文件 fs::create_symlink("non-existing", "sandbox/symlink"); demo_exists("sandbox"); for (auto it = fs::directory_iterator("sandbox"); it != fs::directory_iterator(); ++it) demo_exists(*it, it->status()); // 使用目录条目中的缓存状态 fs::remove_all("sandbox"); }
输出:
"sandbox" exists "sandbox/file" exists "sandbox/symlink" does not exist
参见
|
确定文件属性
确定文件属性,检查符号链接目标 (函数) |
|
|
表示文件类型和权限
(类) |
|
|
此目录条目所指文件的缓存状态
此目录条目所指文件的缓存符号链接状态 (
std::experimental::filesystem::directory_entry
的公开成员函数)
|