【发布时间】:2016-08-17 15:46:30
【问题描述】:
我有一个Qfile,文件名=“d://f1/f2/img.jpg”。我只想要文件的地址(“d://f1/f2)。如何在不转换为QfileInfo 的情况下获取它?
【问题讨论】:
-
创建一个 QFileInfo,这就是它的用途:
QFileInfo(file).absolutePath()。为什么你不想使用它?
我有一个Qfile,文件名=“d://f1/f2/img.jpg”。我只想要文件的地址(“d://f1/f2)。如何在不转换为QfileInfo 的情况下获取它?
【问题讨论】:
QFileInfo(file).absolutePath()。为什么你不想使用它?
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 进行了某种类型的繁重文件转换,但事实并非如此。
查看此链接:
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"
【讨论】:
我认为 frank-osterfeld 的评论是正确答案:
QString fpath (QFileInfo("/home/me/filename.txt").absolutePath());
std::cout << fpath.toStdString() << std::endl;
打印:
/home/me
【讨论】: