Boost.Filesystem create_directories mangles目录名

时间:2015-04-02 23:00:00

标签: c++ boost boost-filesystem

我正在尝试使用Boost.Filesystem创建一个目录(该目录可以由用户提供,因此它可能是具有嵌套目录的路径;该路径中的所有,部分或者任何目录都可能存在以启动)。当我运行程序时,会创建一个目录,但这不是我要求的;包含路径的字符串似乎被破坏了。我从来没有得到两次相同的结果,但目录的名称总是以冒号开头。

一个最小的例子:

#include <iostream>
#include <boost/filesystem.hpp>
namespace fs = boost::filesystem;
int main(int argc, char* argv[]) {
    fs::path path = "junk/morejunk";
    if (!fs::create_directories(path)) {
        std::cerr << "Failed to create directory " << path << ".\n";
    }
    return(0);
}

运行它,我得到:@K%C5?:%C0)%E0?:%C0%E9%93?等目录。

我在使Boost正确链接方面遇到了一些麻烦,但上面的程序现在编译并运行。如果有必要,可以提供以下信息:
- 我正在使用Mac(OSX 10.9.4)
- GCC和Boost都安装了MacPorts(带有+ gcc49选项的Boost)
- GCC版本4.9.2_1
- Boost版本1.57.0_1
- 我的Makefile看起来像

CC = /opt/local/bin/g++
FLAGS = -I/opt/local/include -L/opt/local/lib -lboost_system-mt -lboost_filesystem-mt
driver : driver.cpp
    $(CC) $(FLAGS) -o driver driver.cpp

欢迎任何建议;已经有一段时间了,因为我已经使用了很多C ++,而且我对Boost没有太多的经验。

2 个答案:

答案 0 :(得分:1)

在肢体上,确保将文件保存为ASCII,latin1或UTF8。

否则,您可能会从不兼容的库版本中获得未定义的行为。

您可以使用DYLD_LIBRARY_PATH来获取首选的boost库(您链接的库)。另请参阅Is it OK to use DYLD_LIBRARY_PATH on Mac OS X? And, what's the dynamic library search algorithm with it?

答案 1 :(得分:0)

我遇到了错误的目录名称问题。我使用brew install boost和gcc使用brew install gcc6安装了boost。

事实证明,使用Apple的GCC编译器版本和原始GCC编译器的源文件构建了boost。当我使用Apple的编译器构建源文件时,它确实有效。

或者,使用您选择的编译器自行构建。

另请参阅相关问题的答案https://stackoverflow.com/a/4798180/2535529