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

Getting filename from path using QString basic functions

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

这是怎么回事?显然路径被切断得太快了,但更奇怪的是它根本没有被切断 /

来自 QString::right():

"Returns a substring that contains the n rightmost characters of the string."

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

你要的QString方法是mid,不是rightright从字符串末尾算起):

path = path.mid(path.lastIndexOf("/"));

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

为了更简洁/更通用的代码:

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

注意 QFileInfo 不需要时不会查询文件系统,这里也不需要,因为所有信息都在字符串中。