使用 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
,不是right
(right
从字符串末尾算起):
path = path.mid(path.lastIndexOf("/"));
mid
有第二个参数,但是当它被省略时,你得到的是字符串最右边的部分。
为了更简洁/更通用的代码:
QFileInfo fi("C:/bla/blah/x/y/file.xls");
QString fileName = fi.fileName();
注意 QFileInfo
不需要时不会查询文件系统,这里也不需要,因为所有信息都在字符串中。
有一些路径为 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
,不是right
(right
从字符串末尾算起):
path = path.mid(path.lastIndexOf("/"));
mid
有第二个参数,但是当它被省略时,你得到的是字符串最右边的部分。
为了更简洁/更通用的代码:
QFileInfo fi("C:/bla/blah/x/y/file.xls");
QString fileName = fi.fileName();
注意 QFileInfo
不需要时不会查询文件系统,这里也不需要,因为所有信息都在字符串中。