【问题标题】:Get filename from QFile?从 QFile 获取文件名?
【发布时间】:2011-04-08 14:38:07
【问题描述】:

例如:

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

我如何只获得文件名 - “image.jpg”?

【问题讨论】:

    标签: qt qt4


    【解决方案1】:

    使用QFileInfo 去除路径(如果有):

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

    【讨论】:

    • 您可以通过将 QFile 作为参数提供给 QFileInfo 构造函数来缩短它:QFileInfo fileInfo(f);
    • 如果文件不存在会失败。
    【解决方案2】:

    一种方法,不一定是最好的:从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 部分更适合:
    • QString lastBit = str.section("/", -1, -1);
    • @Kamil,你应该把它作为答案而不是评论,然后我会投票赞成:-)
    • @bat_ventzi,你为什么认为它不适用于../../a/b/c?那仍然会正确拆分并给你c
    • 其实你是对的@paxdiablo。我不知道为什么我会这样评论。 :) 我应该删除评论吗?
    【解决方案3】:

    只是另外:将具有QFile f的文件名和文件路径分开

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

    您不需要创建额外的文件信息。

    【讨论】:

      【解决方案4】:

      我用这个:

      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() 的含义,所以我不知道它们
      猜你喜欢
      • 2016-08-17
      • 1970-01-01
      • 2014-07-22
      • 2014-06-03
      • 1970-01-01
      • 2012-11-04
      • 2021-05-05
      • 2010-10-10
      • 2011-06-23
      相关资源
      最近更新 更多