我有一個像 "C:/Documents/Music/Jazz/../../Pictures/picture.jpg"
的文件路徑。如何使用Visual Studio 2012 <filesystem>類從文件路徑中刪除'../'標記?
我需要刪除'../'標記並將原始文件路徑轉換爲"C:/Documents/Pictures/picture.jpg"
。
我該如何使用Visual Studio 2012(或2013)標題中的類來做到這一點?
我有一個像 "C:/Documents/Music/Jazz/../../Pictures/picture.jpg"
的文件路徑。如何使用Visual Studio 2012 <filesystem>類從文件路徑中刪除'../'標記?
我需要刪除'../'標記並將原始文件路徑轉換爲"C:/Documents/Pictures/picture.jpg"
。
我該如何使用Visual Studio 2012(或2013)標題中的類來做到這一點?
C++ 11沒有文件系統庫。這被認爲是C++14 or C++17標準。
Boost有一個文件系統API,boost:filesystem:path是你可能想看看。
,所以他想要的是'boost :: filesystem :: canonical(boost :: filesystem :: path(「C:\路徑\ .. \ here \ is \ .. \「));'或在C++ 17中'std :: filesystem :: canonical(boost :: filesystem :: path(」C:\ path \ .. \ here \ is \ .. \「));'生成的'path'對象將轉換重載爲字符串。 – PeterT
傑出的發現,PeterT!但是,我想找到一種方法來完成這個任務,而不是提升。 –
@DmitrySapelnikov爲什麼你不能從std :: string擦除? – 4pie0
C++ 11沒有文件系統庫。
然而,它確實有一個算法庫和字符串庫,它會爲你工作。
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);
}
從什麼時候開始使用C++ 11標準文件系統庫? – Xarn
是什麼?它在哪裏? – PlasmaHH
對不起,這是我的錯。真的,Visual Studio 2012和Visual Studio 2013提供的頭文件尚未成爲C++標準的一部分。然後我會編輯這個問題。 –