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

Tom*_*ica 3 qstring qt path

QString有一些路径:

QString path = "C:/bla/blah/x/y/file.xls";
Run Code Online (Sandbox Code Playgroud)

我认为可能获得最后一次补偿/将是一个良好的开端.然后我可以使用right方法(没有双关语)来获取该角色之后的所有内容:

path = path.right(path.lastIndexOf("/"));
Run Code Online (Sandbox Code Playgroud)

或者以更兼容的方式:

path = path.right(std::max(path.lastIndexOf("\\"), path.lastIndexOf("/")));
Run Code Online (Sandbox Code Playgroud)

两者都有相同的坏结果:

ah/x/y/file.xls
Run Code Online (Sandbox Code Playgroud)

这有什么不对?很明显,这条道路很快就被削减了,但它甚至更奇怪,它根本就没有削减/.

Ily*_*lya 11

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

path = path.mid(path.lastIndexOf("/"));
Run Code Online (Sandbox Code Playgroud)

mid 有第二个参数,但当省略它时,你得到字符串的最右边部分.

而对于更清洁/更通用的代码:

QFileInfo fi("C:/bla/blah/x/y/file.xls");
QString fileName = fi.fileName(); 
Run Code Online (Sandbox Code Playgroud)

NB QFileInfo不会在不需要时查询文件系统,而且不需要,因为所有信息都在字符串中.