boost :: filesystem :: create_directory抛出了boost :: filesystem :: filesystem_error:地址错误

时间:2018-05-20 21:41:54

标签: c++ c++11 boost boost-filesystem

TL;我的代码的DR如下:

mappath

代码在std::cout存在时有效(几乎没有,因为我发现Boost几乎在每个函数中都是segfaulting)。
但是,当它没有时,它会抛出一条例外消息" Bad address"。
当我通过"/home/myusername/.testfolder/huni/ENTER YOUR TEXT HERE" 打印mappath时,它会返回:

mappath

哪个是正确的。

请注意,当我尝试在 else语句中打印is_directory 时,会出现段错误。
我在existsif中推断出某些内容与EntityType: EntityClass & EntityCreatorInitializable 混淆,因为在<{em> EntityType: EntityCreatorInitializable 之前打印时没有错误言。

2 个答案:

答案 0 :(得分:0)

我为自己写了一个MCVE。当路径不存在时,提升抛出

terminate called after throwing an instance of 'boost::filesystem::filesystem_error'
  what():  boost::filesystem::create_directory: No such file or directory
Aborted (core dumped)

因为您的程序首先检查路径是否是目录,然后检查路径是否存在(正确)。

当路径存在并且它是目录时,程序在没有输出的情况下运行并且什么都不做(正确)。

当路径存在并且是文件时,boost抛出

terminate called after throwing an instance of 'boost::filesystem::filesystem_error'
  what():  boost::filesystem::create_directory: File exists
Aborted (core dumped)

因为它无法创建目录(正确)。

因此,您的代码段会执行它应该执行的操作。也许您应该更改if声明中的顺序并添加支票给else

#include <boost/filesystem.hpp>
#include <iostream>

class server {
public:
  server(boost::filesystem::path mappath) : mappath(mappath) {
    if(boost::filesystem::exists(mappath) && boost::filesystem::is_directory(mappath)) {
        // Do some stuff here
    } else if (!boost::filesystem::exists(mappath)) {
        boost::filesystem::create_directory(mappath);
    }
  }
private:
  boost::filesystem::path mappath;
};

int main() {
  server s("/path/test");
  return 0;
}

现在程序检查路径是否存在。如果路径存在,程序将检查路径是否为目录。如果路径不存在,则创建目录。

答案 1 :(得分:0)

结果Bad address是特定于POSIX的错误。

我无法在mappath声明的else子句中打印if的原因是,is_directory正在弄乱参考文献。
它实际上在做什么我无法弄清楚。

所以,我已经从Boost切换到实际工作的东西。