有一些路径为QString:
QString path = "C:/bla/blah/x/y/file.xls";
我认为可能获得/
的最后一次偏移将是一个良好的开端。然后,我可以使用right
方法(没有双关语)来获取该角色之后的所有内容:
path = path.right(path.lastIndexOf("/"));
或以更兼容的方式:
path = path.right(std::max(path.lastIndexOf("\\"), path.lastIndexOf("/")));
两者都有相同的不良结果:
ah/x/y/file.xls
这里有什么问题?很明显,这条道路很快就被砍掉了,但它更奇怪的是它根本不会被切断/
。
答案 0 :(得分:9)
您想要的QString
方法是mid
,而不是right
(right
从字符串末尾开始计算):
path = path.mid(path.lastIndexOf("/"));
mid
有第二个参数,但是当省略它时,你会得到字符串的最右边部分。
更清洁/更通用的代码:
QFileInfo fi("C:/bla/blah/x/y/file.xls");
QString fileName = fi.fileName();
NB QFileInfo
在没有必要的情况下不查询文件系统,而且这里不需要,因为所有信息都在字符串中。
答案 1 :(得分:1)
来自QString :: right():
"返回包含字符串n个最右边字符的子字符串。"
您正在使用索引作为计数。你必须使用.size() - .indexOf()。