检查路径是否有效,即使它不存在
Check if a path is valid, even if it doesn't exist
假设我有一个从命令行获取输入和输出目录路径的程序。如果输出目录不存在,我们的程序需要创建它。在将该路径发送到 std::filesystem::create_directory()
.
之前,我想检查(最好使用 std::filesystem
)该路径是否有效
最好的方法是什么?
只有尝试使用路径才能确定它。即使路径格式正确或存在于文件系统中,您也可能无法使用它。
您不能使用的一些技术上有效的路径示例:
- 它在另一个用户的个人目录中,但您没有权限写入甚至读取它
- 是已经存在的文件,不能创建与目录相同的路径
- 它在无法写入的可移动磁盘上
- 在网络电脑上,暂时没有连接
- 是网页路径,但域名未被使用
exists()
函数会对此进行检查。
std::string my_path = "my_folder_path";
if(!std::filesystem::exists(my_path)) {
std::filesystem::create_directory(my_path);
}
你一无所获 (pseudo-code 警报):
if (doesnt_exist(dir)) {
create_directory(dir);
}
最好只做:
create_directory(dir);
并在必要时妥善处理错误。如果你处理后续的错误,你可能甚至不需要在这里处理错误。
“如果存在”检查引入了不必要的复杂性,并引入了竞争条件。即使该目录不存在,您可能仍然没有创建它的权限。所以在任何情况下你的错误处理都是一样的,呈现“如果存在”检查完全没有意义。
我想这是另一种“不请求许可,请求原谅”的方式,除了在计算机上你不需要请求原谅。
假设我有一个从命令行获取输入和输出目录路径的程序。如果输出目录不存在,我们的程序需要创建它。在将该路径发送到 std::filesystem::create_directory()
.
std::filesystem
)该路径是否有效
最好的方法是什么?
只有尝试使用路径才能确定它。即使路径格式正确或存在于文件系统中,您也可能无法使用它。
您不能使用的一些技术上有效的路径示例:
- 它在另一个用户的个人目录中,但您没有权限写入甚至读取它
- 是已经存在的文件,不能创建与目录相同的路径
- 它在无法写入的可移动磁盘上
- 在网络电脑上,暂时没有连接
- 是网页路径,但域名未被使用
exists()
函数会对此进行检查。
std::string my_path = "my_folder_path";
if(!std::filesystem::exists(my_path)) {
std::filesystem::create_directory(my_path);
}
你一无所获 (pseudo-code 警报):
if (doesnt_exist(dir)) {
create_directory(dir);
}
最好只做:
create_directory(dir);
并在必要时妥善处理错误。如果你处理后续的错误,你可能甚至不需要在这里处理错误。
“如果存在”检查引入了不必要的复杂性,并引入了竞争条件。即使该目录不存在,您可能仍然没有创建它的权限。所以在任何情况下你的错误处理都是一样的,呈现“如果存在”检查完全没有意义。
我想这是另一种“不请求许可,请求原谅”的方式,除了在计算机上你不需要请求原谅。