2013-02-21 157 views
1

我正在使用C/C++在Windows上處理應用程序。 我想知道,如何從filename/directory獲得file/directory的完整路徑?從C++中獲取文件名的完整路徑

對於如: 我的文件名是test\test.txt,實際上它位於C:\Sample\test\test.txt,我的項目位於E:\MyProject

那麼我怎樣才能從文件名test\test.txt得到完整的路徑,即C:\Sample\test\test.txt。 同樣適用於任何目錄。

我試過使用GetFullPathName,但它只返回E:\MyProject\test\test.txt這是不正確的。

在此先感謝。

+0

因此,您已經在E:\ MyProject中運行了可執行文件,並且想通過提供「test \ test.txt」打開C:\ Sample \ test \ test.txt中的文件?我對麼? – 2013-02-21 08:16:27

+0

如果您的描述很準確,那麼您不能。不是沒有搜索整個硬盤驅動器,並且可能總是有重複。你有一個相對路徑。你怎麼可能添加從來沒有的信息? – 2013-02-21 08:40:29

+0

其實'GetFullPathName'返回正確的答案。那麼,它會返回它應該的答案。但是你還沒有完全指定你想要的。你似乎在尋求魔法的發生。您的下一步是以有意義的方式定義您的問題。 – 2013-02-21 10:21:53

回答

1

你可以看看Boost Filesystem

它處理相當整齊的所有常見的路徑操作。

你的情況:

int main() 
{ 
    using boost::filesystem::absolute; 
    using boost::filesystem::path; 

    std::cout << absolute(path("test\\test.txt"), path("C:\\Sample")) << std::endl; 
} 

注意,第二個參數是absolute()可選指定「當前路徑」,以用來確定絕對路徑。可能你想要在你的情況下。

+0

根據文檔路徑absolute(const path&p,const path&base = current_path()); where current_path() - 當前工作目錄路徑。需要修改基本路徑,像這樣絕對(路徑(「test \\ test.txt」),路徑(「C:\\ Sample」)) – 2013-02-21 08:22:20

+0

@Sergey:已經提到了第二個參數,但我做了我的回答更具體。謝謝。 – ereOn 2013-02-21 08:34:32

+0

感謝您的回覆,實際上我不知道基本路徑,即「C:\\ Sample」。我只知道一件事,即「test \\ test.txt」,從中我需要找出整個路徑,那麼可以使用'absolute()'方法嗎?還有一個問題需要問我是否可以將我的應用程序的「Boost Filesystem」庫分發給我的客戶,因爲它用於商業用途? – 2013-02-21 09:19:46

相關問題