从QFile中获取文件名?

59

例如:

QFile f("/home/umanga/Desktop/image.jpg");

我如何仅获取文件名 - "image.jpg"?

4个回答

114

使用QFileInfo来删除路径(如果有的话):

QFileInfo fileInfo(f.fileName());
QString filename(fileInfo.fileName());

19
你可以将QFile作为参数传递给QFileInfo的构造函数,进一步缩短代码:QFileInfo fileInfo(f); - user362638
4
如果文件不存在,这将失败。 - bat_ventzi

16

一种方法,不一定是最好的方法:从一个QFile对象中,可以使用QFile::fileName()函数获取文件规范:

QFile f("/home/umanga/Desktop/image.jpg");
QString str = f.fileName();

那么你可以直接使用字符串功能,比如QString::split

QStringList parts = str.split("/");
QString lastBit = parts.at(parts.size()-1);

QString更适合使用: - Kamil Klimek
10
QString lastBit = str.section("/", -1, -1);将字符串中的最后一部分提取出来并赋值给lastBit变量。 - Kamil Klimek
1
@bat_ventzi,为什么你认为它不能用于像../../a/b/c这样的东西?那仍然可以正确地分割并给出c - paxdiablo
其实你说得对@paxdiablo。我不知道为什么我会这样评论。 :) 我应该删除评论吗? - bat_ventzi
@bat_ventzi,由你决定。我会观察一段时间,如果你删除了,我也会删除我的。或者你可以将其留作评论,我相信SO不会因为这里少了几个字节而错过什么。;-) - paxdiablo
显示剩余2条评论

11

仅作补充:如果要分离QFile f的文件名和文件路径

QString path = f.fileName();
QString file = path.section("/",-1,-1);
QString dir = path.section("/",0,-2);

你不需要创建额外的fileInfo。


1
我使用这个:
bool utes::pathsplit(QString source,QString *path,QString *filename)
{
QString fn;
int index;
    if (source == "") return(false);
    fn = source.section("/", -1, -1);
    if (fn == "") return(false);
    index = source.indexOf(fn);
    if (index == -1) return(false);
    *path = source.mid(0,index);
    *filename = fn;
    return(true);
}

聰明,但對我來說似乎轉彎路很長。 +1 因為我不知道**QString::section()QString::mid()**的含義,所以我必須尋找它們的含義。 - Eyad Mohammed Osama

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接