在QT中获取文件或目录信息时可以通过QFileInfo或者QDir来获取,但是在QT提供的方法中提供了大量名称相近的方法,容易引起误会,因此在此做了一个总结,以免每次用起来的时候都要去看QT官方简单而又晦涩的文档。

这里以Windows下的文件系统为例作代码展示,首先准备几个文件,分别代表文件、文件的快捷方式、复杂文件后缀的文件及文件夹等,分别如下:


文件或文件夹名



说明



C:/javafx-src.zip.lnk



” C:/Java/jdk1.8.0_281/javafx-src.zip”的快捷方式



C:/Java/jdk1.8.0_281/javafx-src.zip



文件



D:/AI_Python/project.tar.gz



复杂文件后缀,即.tar.gz



C:/Qt/Qt5.14.2



目录


首先创建上述文件或文件夹,对于文件的话不要求文件的具体内容,但是文件和文件夹必须存在。

相关代码如下:


/**
* @brief FileInfoDemo 展示QFileInfo有关的详细信息
* @param fileInfo QFileInfo实例
*/
void FileInfoDemo(QFileInfo& fileInfo)
{
qDebug() << "absoluteFilePath:" << fileInfo.absoluteFilePath();
qDebug() << "absolutePath:" << fileInfo.absolutePath();
qDebug() << "baseName:" << fileInfo.baseName();
qDebug() << "bundleName:" << fileInfo.bundleName();
qDebug() << "canonicalFilePath:" << fileInfo.canonicalFilePath();
qDebug() << "canonicalPath:" << fileInfo.canonicalPath();
qDebug() << "completeBaseName:" << fileInfo.completeBaseName();
qDebug() << "completeSuffix:" << fileInfo.completeSuffix();
qDebug() << "fileName:" << fileInfo.fileName();
qDebug() << "filePath:" << fileInfo.filePath();
qDebug() << "path:" << fileInfo.path();
qDebug() << "suffix:" << fileInfo.suffix();
qDebug() << "symLinkTarget:" << fileInfo.symLinkTarget();
qDebug() << "size:" << fileInfo.size();
}

/**
* @brief DirDemo 展示QDir有关的详细信息
* @param dir QDir实例
*/
void DirDemo(QDir& dir)
{
qDebug() << "absolutePath:" << dir.absolutePath();
qDebug() << "baseName:" << dir.dirName();
qDebug() << "canonicalPath:" << dir.canonicalPath();
qDebug() << "path:" << dir.path();
}

调用的代码如下:


    //C:/javafx-src.zip.lnk是文件C:/Java/jdk1.8.0_281/javafx-src.zip的快捷方式
QFileInfo fileinfo("C:/javafx-src.zip.lnk");
FileInfoDemo(fileinfo);

fileinfo.setFile("C:/Java/jdk1.8.0_281/javafx-src.zip");
FileInfoDemo(fileinfo);

fileinfo.setFile("D:/AI_Python/project.tar.gz");
FileInfoDemo(fileinfo);

fileinfo.setFile("C:/Qt/Qt5.14.2");
FileInfoDemo(fileinfo);

QDir dir("C:/Qt/Qt5.14.2");
DirDemo(dir);

最终的输出如下:


 



C:/javafx-src.zip.lnk



C:/Java/jdk1.8.0_281/javafx-src.zip



D:/AI_Python/project.tar.gz



C:/Qt/Qt5.14.2



absoluteFilePath



C:/javafx-src.zip.lnk



C:/Java/jdk1.8.0_281/javafx-src.zip



D:/AI_Python/project.tar.gz



C:/Qt/Qt5.14.2



absolutePath



C:/



C:/Java/jdk1.8.0_281



D:/AI_Python



C:/Qt



baseName



javafx-src



javafx-src



project



Qt5



bundleName



 



 



 



 



canonicalFilePath



C:/Java/jdk1.8.0_281/javafx-src.zip



C:/Java/jdk1.8.0_281/javafx-src.zip



D:/AI_Python/project.tar.gz



C:/Qt/Qt5.14.2



canonicalPath



C:/Java/jdk1.8.0_281



C:/Java/jdk1.8.0_281



D:/AI_Python



C:/Qt



completeBaseName



javafx-src.zip



javafx-src



project.tar



Qt5.14



completeSuffix



zip.lnk



zip



tar.gz



14.2



fileName



javafx-src.zip.lnk



javafx-src.zip



project.tar.gz



Qt5.14.2



filePath



C:/javafx-src.zip.lnk



C:/Java/jdk1.8.0_281/javafx-src.zip



D:/AI_Python/project.tar.gz



C:/Qt/Qt5.14.2



path



C:/



C:/Java/jdk1.8.0_281



D:/AI_Python



C:/Qt



suffix



lnk



zip



gz



2



symLinkTarget



C:/Java/jdk1.8.0_281/javafx-src.zip



 



 



 



size



5226868



5226868



932927547



0


下面对上面的属性做详细说明:


属性名



属性说明



absoluteFilePath



对于文件、快捷方式文件、文件夹均为该文件的包含文件名的全物理路径。



absolutePath



对于文件、快捷方式文件、文件夹均为该文件所在的文件夹的全物理路径。



baseName



对于文件、快捷方式文件、文件夹均为不包含任何文件后缀的文件名。



bundleName



仅适用于MacOSiOS系统,其它平台均返回空字符串。



canonicalFilePath



对于快捷方式文件来说返回快捷方式所指向的文件的absoluteFilePath,对于普通文件、文件夹为当前文件的absoluteFilePath



canonicalPath



对于快捷方式文件来说返回快捷方式所指向的文件的absolutePath,对于普通文件、文件夹为当前文件的absolutePath



completeBaseName



文件不包含suffix的名字,如” javafx-src.zip”返回” javafx-src”” javafx-src.zip.lnk”返回” javafx-src.zip”,如果是文件夹则返回文件夹的名称



completeSuffix



对于文件来说返回的是文件的完整后缀,如” javafx-src.zip”返回” zip”” project.tar.gz”返回” tar.gz”,如果是文件夹则返回值没有任何意义(虽然在本实例中有返回值)



fileName



对于文件来说返回的是不包含文件路径的名称,对于文件夹则是不包含文件夹路径的文件夹名称



filePath



等同于absoluteFilePath,均为全物理路径



path



等同于absolutePath,均为父级文件夹的全路径



suffix



对于文件来说返回的是文件的最后一个后缀,如” javafx-src.zip”返回” zip”” project.tar.gz”返回” gz”,如果是文件夹则返回值没有任何意义(虽然在本实例中有返回值)



symLinkTarget



对于快捷方式文件来说返回快捷方式所指向的文件的absoluteFilePath,对于普通文件、文件夹均为空。



size



对于快捷方式文件来说返回快捷方式所指向的文件的文件体积,对于普通文件为当前文件的体积,对于文件夹则为空。



题外话,QT的API说明文档跟Java和C#的API相比差了一些,一些相近的方法(功能相近或者参数相近)的说明语焉不详,更不提没有中文文档了,所以有的时候想要弄清楚方法之间的异同之处,需要看源代码和编写验证代码来证实自己的想法。这大概跟公司的体量有关系吧。