2014-02-19 63 views
-1

我有一個像 "C:/Documents/Music/Jazz/../../Pictures/picture.jpg"的文件路徑。如何使用Visual Studio 2012 <filesystem>類從文件路徑中刪除'../'標記?

我需要刪除'../'標記並將原始文件路徑轉換爲"C:/Documents/Pictures/picture.jpg"

我該如何使用Visual Studio 2012(或2013)標題中的類來做到這一點?

+3

從什麼時候開始使用C++ 11標準文件系統庫? – Xarn

+0

是什麼?它在哪裏? – PlasmaHH

+0

對不起,這是我的錯。真的,Visual Studio 2012和Visual Studio 2013提供的頭文件尚未成爲C++標準的一部分。然後我會編輯這個問題。 –

回答

3

C++ 11沒有文件系統庫。這被認爲是C++14 or C++17標準。

Boost有一個文件系統API,boost:filesystem:path是你可能想看看。

+1

,所以他想要的是'boost :: filesystem :: canonical(boost :: filesystem :: path(「C:\路徑\ .. \ here \ is \ .. \「));'或在C++ 17中'std :: filesystem :: canonical(boost :: filesystem :: path(」C:\ path \ .. \ here \ is \ .. \「));'生成的'path'對象將轉換重載爲字符串。 – PeterT

+0

傑出的發現,PeterT!但是,我想找到一種方法來完成這個任務,而不是提升。 –

+0

@DmitrySapelnikov爲什麼你不能從std :: string擦除? – 4pie0

1

C++ 11沒有文件系統庫。

然而,它確實有一個算法庫和字符串庫,它會爲你工作。

1

C++ 11不包含文件系統庫。您可以使用std::string提供的標準工具來處理您的路徑:

std::string s("C:/Documents/Music/Jazz/../../Pictures/picture.jpg"); 
size_t t; 
while ((t = s.find("/..")) != std::string::npos) { 
    s.erase(t, 3); 
} 
if ((t = s.find("/Music/Jazz")) != std::string::npos) { 
    s.erase(t, 11); 
} 
相關問題