2010-06-11 26 views
20

我使用std::ifstream打開文件。如何從C++的std :: ifstream獲取文件路徑

我可以使用相對路徑(file.txt)或絕對路徑(C:\test\file.txt)打開文件。

由於我傳遞一個字符串作爲文件名,我不知道它是相對路徑還是絕對路徑。

有沒有人可以告訴我如何獲得文件已成功打開後使用 std::ifstream絕對路徑?

例如爲:

std::ifstream file(strFile); // strFile is "file.txt" or "C:\test\file.txt" 

我想要的文件被打開後,成功拿到絕對路徑。

感謝,

+0

你正在做一個控制檯應用程序,或者你是否使用框架來擁有某種用戶界面(UI)? – Alerty 2010-06-11 16:36:37

回答

3

的fstream的類具有訪問或處理打開使用該文件的名稱中沒有的功能,以及C++標準庫有沒有文件名的處理功能 - 你將不得不自己編寫代碼,或使用第三方庫或操作系統提供的功能。

17

您不能,std::ifstream不存儲此信息。

什麼你可以做的,卻是:

  1. 使用進程的當前工作目錄到自己撰寫的絕對路徑,或
  2. 使用圖書館像Boost.Filesystem庫相對的,之間轉換絕對路徑。

    boost::filesystem::path abs_path = boost::filesystem::complete("./rel/path"); 
    std::string abs_path_str = abs_path.string(); 
    
2

我不認爲這是可能的一個std :: fstream的。我在Windows上使用FILE *(以非便攜方式)。見from file object to file name

您是否考慮過使用自己的類來記錄文件名?

+1

如果投票選出這個5歲的答案的人留下了解釋發生了什麼問題的評論,那將會很有幫助。 – 2015-07-17 08:44:43