检查路径是否有效,即使它不存在

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);

并在必要时妥善处理错误。如果你处理后续的错误,你可能甚至不需要在这里处理错误。

“如果存在”检查引入了不必要的复杂性,并引入了竞争条件。即使该目录不存在,您可能仍然没有创建它的权限。所以在任何情况下你的错误处理都是一样的,呈现“如果存在”检查完全没有意义。

我想这是另一种“不请求许可,请求原谅”的方式,除了在计算机上你不需要请求原谅。