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

Qt 使用QString基本函数从路径获取文件名,qt,path,qstring,Qt,Path,Qstring,有一些路径作为QString: QString path = "C:/bla/blah/x/y/file.xls"; 我想也许获得/的最后偏移量将是一个好的开始。然后,我可以使用这个方法(没有双关语)来获取该角色之后的所有内容: path = path.right(path.lastIndexOf("/")); 或者以更兼容的方式: path = path.right(std::max(path.lastIndexOf("\\"), path.lastIndexOf("/"))); 这两者

有一些路径作为QString:

QString path = "C:/bla/blah/x/y/file.xls";
我想也许获得
/
的最后偏移量将是一个好的开始。然后,我可以使用这个方法(没有双关语)来获取该角色之后的所有内容:

path = path.right(path.lastIndexOf("/"));
或者以更兼容的方式:

path = path.right(std::max(path.lastIndexOf("\\"), path.lastIndexOf("/")));
这两者都有同样的坏结果:

ah/x/y/file.xls
这里怎么了?显然,这条路被切断得太快了,但更奇怪的是,它根本就没有被切断。

来自QString::right():

“返回包含字符串最右边n个字符的子字符串。”


您正在使用索引作为计数。您必须使用.size()-.indexOf()。

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

mid
有第二个参数,但如果省略它,则会得到字符串的最右边部分

对于更干净/更通用的代码:

QFileInfo fi("C:/bla/blah/x/y/file.xls");
QString fileName = fi.fileName(); 
NB
QFileInfo
不必查询文件系统,这里也不必查询,因为所有信息都在字符串中。

QFileInfo(“C:/bla/blah/x/y/file.xls”).fileName()
QFileInfo fi("C:/bla/blah/x/y/file.xls");
QString fileName = fi.fileName();