2012-05-27 23 views
4

可能重複:
Creating a directory In C or C++如何在C++中創建一個文件夾,並且沒有路徑名稱就是您想要創建的文件夾的名稱?

我要作出這樣的標題爲 「BobtheBuilder」 的文件夾。然後我想在裏面創建一個文本文件。我想在不知道我的路徑的情況下做到這一點。我不希望有鍵入:

ofstream out("C:/MyComputer/User/Jeff/etc/BobtheBuilder/NewFile.txt"); 

我希望它只是成爲當地這方面在我的可執行文件包含這樣的:

ofstream out("/BobtheBuilder/NewFile.txt"); 

這可能嗎?爲了做文件管理,我必須知道整個路徑名嗎?我覺得這是可能的,因爲你可以創建或打開一個文件,是在同一個目錄中,如程序:

ifstream inf("NewFile.txt"); 

還是有,在像這樣原來的路徑填充一個特殊的關鍵字:

ifstream inf("FILLIN/BobtheBuilder/NewFile.txt"); 

感謝

+3

我認爲special關鍵字是'。'它指向你的工作目錄。 – shilk

回答

3

您可以絕對指定沒有指定整個路徑類似「BobtheBuilder/NewFile.txt」的相對路徑。 然而,您需要先在文件前創建文件夾。 由於創建文件夾是特定於平臺的,並且由於您在Windows上,因此需要使用「BobtheBuilder」作爲其參數調用CreateDirectory函數。 然後,該文件夾將在程序的默認工作目錄中創建,該目錄與可執行文件所在的文件夾相同。 在創建文件夾和文件之前,您可以使用SetCurrentDirectory函數更改此工作目錄。

0

爲了創建可以使用C函數目錄:

int mkdir(const char *pathname, mode_t mode); 

如果你可以使用Boost,那就真的變得更容易,更C++友好:

bool create_directories(const path& p); 

// usage example 
boost::filesystem::create_directories("./BobtheBuilder"); 

正如你在提到你問題,你可以使用絕對路徑和相對路徑。這取決於你的意圖。在你的情況下,你可以這樣做:

boost::filesystem::create_directories("./BobtheBuilder"); 
ofstream out("./BobtheBuilder/NewFile.txt"); 

根本不需要指定絕對路徑。

如果您經常需要管理路徑,Boost會爲路徑管理提供許多有用的工具。舉個例子,考慮你在問題中提到的問題:你想獲得當前目錄的完整路徑,然後追加一個相對路徑。你可以這樣做很容易:

#include <boost/filesystem.hpp> 
namespace fs = boost::filesystem; 
... 
fs::path curr_abs_path = fs::current_path(); 
fs::path rel_path = "foo/bar"; 
fs::path combined = (curr_abs_path /= rel_path); 
cout << combined << endl; 

假設當前目錄爲/ tmp /前面的代碼片段將打印:

的/ tmp /富/酒吧

operator/=負責用於追加兩條路徑並返回組合結果。

相關問題