2009-12-24 66 views
0

在以下示例中使用Boost Filesystem的createdirectory(和createdirectories)函数时,“/”将替换为“\”。在Linux上使用Boost Filesystem createdirector替换“/”为“”

boost::filesystem::path path ("/data/configSet"); 
boost::filesystem::create_directory(path); 

此代码剪断产生的,而不是创建“configSet”内部“数据”的子目录被称为“数据\ configSet”目录。使用createdirectories()会发生同样的问题;

当在Windows系统上执行代码时,不会发生此问题。我目前正在Linux上使用Ubuntu 9.10测试

+0

除Brians问题外,您还使用了哪些Boost版本? – 2009-12-25 00:11:15

回答

3

看起来是因为某些原因boost :: filesystem认为你在Windows上,而不是在Linux上,因此使用Windows样式路径名(由\分隔)。你能发布一些关于你如何构建Boost的更多信息,以及你如何包含标题?你可能在Linux上构建了一个Windows版本的Boost?

编辑:我尝试在尽可能接近你的配置中设置自己。 Ubuntu 9.10,libboost1.40-all-dev安装。当我编译并运行下面的程序时,它按预期工作,在/data中创建一个名为configSet的目录。

#include <boost/filesystem.hpp> 

int main() { 
    boost::filesystem::path p("/data/configSet"); 
    boost::filesystem::create_directory(p); 

    return 0; 
} 

您可以尝试使用以下命令编译并运行该程序,并查看它是否会给您不同的结果?

$ g++ -o boost-filesystem -lboost_filesystem boost-filesystem.cpp 
$ ./boost-filesystem 
+0

由于这是在Ubuntu上,我刚刚安装了使用Synaptic的libboost1.40-all-dev。 我的开发环境是代码::块,所以我只是包括升压文件系统的头按通常: 的#include <升压/ filesystem.hpp> ,然后设置我的连接选项,以-lboost_filesystem。 – Dave 2009-12-25 00:15:31

+1

Brian在尝试你的例子并找到它的工作后(从“/ data/configSet”开头删除“/”之后),我深入了一点,发现Code :: Blocks已将“WIN32”设置为额外选项在我的编译器选项中。这可能是由于我从Visual Studio导入项目。 删除WIN32定义已解决该问题。正如你最初提出的那样,这是问题所在,我已经将你的答案标记为正确答案。 谢谢! – Dave 2009-12-25 12:00:57

相关问题