我以CString的形式接收文件路径。例如:C:\ Program Files \ Program \ Maps \ World \ North-America
我需要在地图之前删除所有内容。 I.e C:\ Program Files \ Program \但是这个文件路径可能不同。
我试过了:
from bar import * # though you shouldn't be using import * anyway
哪些不一致。它正在错误的地方切割一些文件路径。该解决方案不需要使用截断/替换,但我不确定如何做到这一点
答案 0 :(得分:1)
我熟悉的CString
没有Truncate
成员,而ReverseFind
仅适用于单个字符,而不适用于子字符串;所以fullPath
的类型对我来说是一个谜。
我注意到的一件事:_T(fullPath)
出现在您的代码中,但_T
宏仅适用于文字(带引号的字符串或字符)。
无论如何,这是一个CString
唯一的解决方案。
CString TruncatePath(CString path, CString subdir) {
CString sub = path;
const int index = sub.MakeReverse().Find(subdir.MakeReverse());
return index == -1 ? path : path.Right(index + subdir.GetLength());
}
...
CString path = _T("C:\\Program Files\\Program\\Maps\\World\\North-America");
CString sub_path = TruncatePath(path, _T("Maps\\"));
给你sub_path
:Maps\World\North-America
答案 1 :(得分:-1)
您可以使用Delete
功能。
例如:
CString path(_T("C:\\Program Files\\Program\\Maps\\World\\North-America"));
path.Delete(0, path.Find(_T("Maps"))); //pass first index and number of count to delete
现在变量path
的值为Maps\\World\\North-America