2009-12-24 21 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

相關問題