gpt4 book ai didi

c++ - create_directories() 与 create_directories()

转载 作者:行者123 更新时间:2023-12-02 12:13:11 26 4
gpt4 key购买 nike

目前我正在尝试使用std::filesystem。我正在使用 MinGW-W64 GCC 7.1.0 处理 Windows 7 64 位。由于此编译器不支持 std::filesystem,因此我必须包含实验版本并与 -lstdc++fs 链接。

#include <experimental/filesystem>
namespace fs = std::experimental::filesystem;

这工作得很好,直到我想创建嵌套目录。如果我使用 create_directory() 一次创建一个目录,一切都会完美。现在,如果我改用 create_directories() ,如果其中一个目录已存在,它会抛出 filesystem_error

fs::path levelA{"."};
fs::path levelB{"folder"};
fs::path levelAB = levelA / levelB; // "./folder"

bool create_separately; // set this bool as needed

if (create_separately) {
/* This works perfectly */
fs::create_directory(levelA);
fs::create_directory(levelAB);
}
else {
/* This throws because "." already exists */
fs::create_directories(levelAB);
}

比较 experimental 的文档版本为standard版本,为标准版本增加了一句:

Executes (1) for every element of p that does not already exist. If p already exists, the function does nothing (this condition is not treated as an error).

为什么这首先被视为错误?这被认为是一个错误吗?

此外,有没有一种简单的方法可以在 Windows 上更新 GCC?我读到了有关 GCC 8.1.0 发布的信息以及一些支持它的新 MinGW 版本,但我似乎找不到任何下载。

最佳答案

也许你是这个意思,但请注意,只有你引用的第二句话相对于 TS 版本发生了变化,并且自从提出这个问题以来又发生了变化。指的是p的情况已经存在并且可能不是目录;该函数返回 false表明它什么也没做,但在询问时它没有报告任何错误,无论 p 的性质如何。逻辑是,大多数操作系统不区分这种情况,因此由应用程序开发人员询问他们是否关心。

was added由于 LWG issue ;前面的措辞的含义充其量是不清楚的,没有解释如果函数未能满足其规定的后置条件会发生什么。没有“后置条件失败是错误”的一般概念,而是“在没有报告错误的情况下后置条件失败在逻辑上是不可能的”。

自从这个答案的初始版本以来,paper已接受,当且仅当冲突对象不是目录时才将其更改为错误,需要在许多平台上进行后续检查。这对于 C++ 来说是不寻常的,但结果被认为更直观,而且操作成本也相对较高。

无论如何,您的实现失败的原因是 .似乎是有问题的。 (对于如何最轻松地获取更新版本,我没有任何特殊提示。)

关于c++ - create_directories() 与 create_directories(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50227995/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com