刪除文件名我有C++如何從路徑字符串
const char *pathname = "..\somepath\somemorepath\somefile.ext";
如何變換成
"..\somepath\somemorepath"
?
刪除文件名我有C++如何從路徑字符串
const char *pathname = "..\somepath\somemorepath\somefile.ext";
如何變換成
"..\somepath\somemorepath"
?
最簡單的方法是使用std::string
string s1("../somepath/somemorepath/somefile.ext");
string s2("..\\somepath\\somemorepath\\somefile.ext");
cout << s1.substr(0, s1.find_last_of("\\/")) << endl;
cout << s2.substr(0, s2.find_last_of("\\/")) << endl;
find_last_of
成員函數此解決方案可工作在前進和後退斜線。
它的工作原理假定用戶從不將合法的斜槓放入他的文件名 – Potatoswatter 2012-04-28 15:48:15
適合我:)謝謝! – Mat 2012-04-28 16:17:35
沒有爲我工作,但這確實http://stackoverflow.com/questions/8518743/get-directory-from-file-path-c – brad 2017-01-20 19:29:18
使用strrchr()
找到最後一個反斜槓並去掉字符串。
char *pos = strrchr(pathname, '\\');
if (pos != NULL) {
*pos = '\0'; //this will put the null terminator here. you can also copy to another string if you want
}
如果它是正斜槓('/')而不是? – Cameron 2012-04-28 15:29:21
在Windows上使用_splitpath()
和Linux上使用dirname()
在Windows 8中,使用PathCchRemoveFileSpec
可以在Pathcch.h
PathCchRemoveFileSpec
發現將刪除最後一個元素的路徑,所以如果你傳遞的目錄路徑,最後一個文件夾將被剝離。
如果你想避免這種情況,你是不確定的,如果文件路徑是一個目錄,使用PathIsDirectory
PathCchRemoveFileSpec
含前鋒斜線路徑沒有按預期的行爲。
只在Windows 8 – Liviu 2016-05-10 09:40:34
Boost有一個不錯的'filesystem :: path'類... – Cameron 2012-04-28 15:27:42