【问题标题】:get file address without file name from QFile从 QFile 获取不带文件名的文件地址
【发布时间】:2016-08-17 15:46:30
【问题描述】:

我有一个Qfile,文件名=“d://f1/f2/img.jpg”。我只想要文件的地址(“d://f1/f2)。如何在不转换为QfileInfo 的情况下获取它?

【问题讨论】:

  • 创建一个 QFileInfo,这就是它的用途:QFileInfo(file).absolutePath()。为什么你不想使用它?

标签: c++ qt qfile


【解决方案1】:
 QString folder=file.fileName().section("/",0,-2);

.section 函数将 qstring 的内容分开并标记如下:

 _______________________________
| d: | / | /f1 | /f2 | /img.jpg |
 -------------------------------
| 0  | 1 |  2  |  3  |  4       |
 -------------------------------
| -5 |-4 | -3  | -2  | -1       |
 -------------------------------

因此 section("/",0,-2) 将返回:d://f1/f2

【讨论】:

  • 与使用QFileInfo 相比,这种语法比较迟钝,而且效率也不高。您似乎认为QFileInfo 进行了某种类型的繁重文件转换,但事实并非如此。
【解决方案2】:

查看此链接:

http://doc.qt.io/qt-4.8/qfileinfo.html#absolutePath

文件路径:

QFileInfo fi("c:/temp/foo"); => fi.absoluteFilePath() => "C:/temp/foo"

还有文件基名:

QFileInfo fi("/tmp/archive.tar.gz");
QString base = fi.baseName();  // base = "archive"

【讨论】:

    【解决方案3】:

    我认为 frank-osterfeld 的评论是正确答案:

    QString fpath (QFileInfo("/home/me/filename.txt").absolutePath());
    std::cout << fpath.toStdString() << std::endl;
    

    打印:

    /home/me
    

    【讨论】:

      猜你喜欢
      • 2011-04-08
      • 1970-01-01
      • 2014-07-22
      • 1970-01-01
      • 2018-05-31
      • 1970-01-01
      • 2011-06-15
      • 2011-10-02
      • 2014-08-15
      相关资源
      最近更新 更多