使用QString基本函数从路径获取文件名

时间:2016-03-14 11:45:41

标签: qt path qstring

有一些路径为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

这里有什么问题?很明显,这条道路很快就被砍掉了,但它更奇怪的是它根本不会被切断/

2 个答案:

答案 0 :(得分:9)

您想要的QString方法是mid,而不是rightright从字符串末尾开始计算):

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()。