Qt 使用QString基本函数从路径获取文件名
有一些路径作为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 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();
NBQFileInfo
不必查询文件系统,这里也不必查询,因为所有信息都在字符串中。QFileInfo(“C:/bla/blah/x/y/file.xls”).fileName()代码>。
QFileInfo fi("C:/bla/blah/x/y/file.xls");
QString fileName = fi.fileName();