删除CString的开头

时间:2017-01-31 22:06:32

标签: c++ mfc substring

我以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

哪些不一致。它正在错误的地方切割一些文件路径。该解决方案不需要使用截断/替换,但我不确定如何做到这一点

2 个答案:

答案 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_pathMaps\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