Kor*_*ose 5 c++ gcc mingw-w64 c++17
目前我正在尝试使用std::filesystem. 我正在使用 MinGW-W64 GCC 7.1.0 在 Windows 7 64 位上工作。由于此编译器不支持std::filesystem,我必须包含实验版本并与-lstdc++fs.
#include <experimental/filesystem>
namespace fs = std::experimental::filesystem;
Run Code Online (Sandbox Code Playgroud)
在我想创建嵌套目录之前,这工作得很好。如果我使用 一次创建一个目录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);
}
Run Code Online (Sandbox Code Playgroud)
对 p 中不存在的每个元素执行 (1)。如果 p 已存在,则该函数不执行任何操作(此条件不被视为错误)。
为什么这首先被视为错误?这被认为是一个错误吗?
另外,是否有一种简单的方法可以在 Windows 上更新 GCC?我读了一些关于 GCC 8.1.0 的发布和一些支持它的新 MinGW 版本,但我似乎找不到任何下载。
也许你是这个意思,但请注意,只有你引用的第二句话相对于 TS 版本 \xe2\x80\x94 发生了变化,并且自从提出这个问题以来又发生了变化。p指的是已经存在但可能不是目录的情况;该函数返回false表明它没有执行任何操作,但在询问时它没有\xe2\x80\x99t 报告任何错误,无论p. 逻辑是,大多数操作系统不区分这种情况,因此由应用程序开发人员询问他们是否关心。
它是由于LWG 问题而添加的;前面的措辞的含义充其量是不清楚的,没有解释如果函数未能满足其规定的后置条件会发生什么。没有 \xe2\x80\x9cpostcondition 失败是错误\xe2\x80\x9d 的一般概念,而是在没有报告错误的情况下 \xe2\x80\x9cpostcondition 失败在逻辑上是不可能的\xe2\x80\x9d。
\n自从这个答案的最初版本以来,一篇论文被接受,当且仅当冲突对象不是目录时才将其更改为错误,需要在许多平台上进行后续检查。这对于 C++ 来说是不寻常的,但结果被认为更直观,而且操作成本也相对较高。
\n无论如何,您的实现失败的原因.似乎是它\xe2\x80\x99 有错误。(我没有\xe2\x80\x99t关于如何最轻松地获取更新版本的任何特殊提示。)