boost::filesystem::create_directory threw a boost::filesystem::filesystem_error: Bad address
boost::filesystem::create_directory threw a boost::filesystem::filesystem_error: Bad address
我的代码的 TL;DR 如下:
server::server(boost::filesystem::path mappath) : mappath(mappath) {
if(boost::filesystem::is_directory(mappath) && boost::filesystem::exists(mappath)) {
// Do some stuff here
} else {
boost::filesystem::create_directory(mappath);
}
}
代码在 mappath
存在时有效(几乎没有,因为我发现 Boost 几乎在每个函数中都存在段错误)。
但是,如果没有,它会抛出消息 "Bad address".
的异常
当我通过 std::cout
打印 mappath
时,它 returns:
"/home/myusername/.testfolder/huni/ENTER YOUR TEXT HERE"
哪个是正确的。
请注意,当我尝试打印 mappath
inside else 语句时,它会出现段错误。
我推断 is_directory
或 exists
中的 mappath
有问题,因为在 之前 打印 if
时没有错误]声明。
我给自己写了一个MCVE。当路径不存在时,boost 抛出
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;
}
现在程序检查路径是否存在。如果路径存在,程序将检查路径是否为目录。如果路径不存在,则创建目录。
原来 Bad address
是 POSIX 特定的错误。
另外,我无法在 if
语句的 else 子句中打印 mappath
的原因是 is_directory
弄乱了引用。
它实际上在做什么我无法弄清楚。
所以,我已经从 Boost 切换到实际有效的东西。
我的代码的 TL;DR 如下:
server::server(boost::filesystem::path mappath) : mappath(mappath) {
if(boost::filesystem::is_directory(mappath) && boost::filesystem::exists(mappath)) {
// Do some stuff here
} else {
boost::filesystem::create_directory(mappath);
}
}
代码在 mappath
存在时有效(几乎没有,因为我发现 Boost 几乎在每个函数中都存在段错误)。
但是,如果没有,它会抛出消息 "Bad address".
的异常
当我通过 std::cout
打印 mappath
时,它 returns:
"/home/myusername/.testfolder/huni/ENTER YOUR TEXT HERE"
哪个是正确的。
请注意,当我尝试打印 mappath
inside else 语句时,它会出现段错误。
我推断 is_directory
或 exists
中的 mappath
有问题,因为在 之前 打印 if
时没有错误]声明。
我给自己写了一个MCVE。当路径不存在时,boost 抛出
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;
}
现在程序检查路径是否存在。如果路径存在,程序将检查路径是否为目录。如果路径不存在,则创建目录。
原来 Bad address
是 POSIX 特定的错误。
另外,我无法在 if
语句的 else 子句中打印 mappath
的原因是 is_directory
弄乱了引用。
它实际上在做什么我无法弄清楚。
所以,我已经从 Boost 切换到实际有效的东西。