0.详细介绍
QFileInfo类提供了独立于系统的文件信息.它主要提供了文件系统中文件的名字和路径信息,以及指定文件的访问权限,判断它是一个文件还是符号链接.它还提供了获取文件大小,文件最后一次修改和阅读的时间的方法,它还可以用于获取Qt资源的信息.
QFileInfo的对象还可以用来指向文件的相对路径或者绝对路径,也就是说可以使用相对或绝对路径来构造QFileInfo的对象来使用.绝对文件路径以目录分隔符“/”(或在Windows上的驱动器规范)开始.相对文件名以目录名或文件名开始,并指定相对于当前工作目录的路径.举个例子:绝对路径的一个例子是字符串“/tmp/quartz”.相对路径可能看起来像“src/fatlib”.您可以使用isRelative()来检查QFileInfo是否使用相对文件路径.你可以调用函数makeAbsolute()来将文件的相对路径转化为绝对路径.
QFileInfo所工作的文件是在构造函数中设置的,当然你也可以在任何时候通过调用setFile()设置.使用exists()方法来判断文件是否存在和使用size()方法来获取文件的字节大小.
文件的类型可以通过isFile().isDir()和isSymLink()来判断.symLinkTarget()函数提供了symlink指向的文件的名称.
在Unix(包括Mac OS X)上,symlink拥有相同的尺寸()拥有它指向的文件,因为Unix透明地处理符号链接;类似地,打开一个使用QFile的符号链接,有效地打开了链接的目标.例如:
#ifdef Q_OS_UNIX
QFileInfo info1("/home/bob/bin/untabify");
info1.isSymLink(); // returns true
info1.absoluteFilePath(); // returns "/home/bob/bin/untabify"
info1.size(); // returns 56201
info1.symLinkTarget(); // returns "/opt/pretty++/bin/untabify"
QFileInfo info2(info1.symLinkTarget());
info2.isSymLink(); // returns false
info2.absoluteFilePath(); // returns "/opt/pretty++/bin/untabify"
info2.size(); // returns 56201
#endif
在Windows上,符号链接(快捷键)是.lnk文件。报告的大小()是symlink(不是链接的目标),并使用QFile打开一个symlink打开.lnk文件.例如:
#ifdef Q_OS_WIN
QFileInfo info1("C:\\Documents and Settings\\Bob\\untabify.lnk");
info1.isSymLink(); // returns true
info1.absoluteFilePath(); // returns "C:/Documents and Settings/Bob/untabify.lnk"
info1.size(); // returns 743
info1.symLinkTarget(); // returns "C:/Pretty++/untabify"
QFileInfo info2(info1.symLinkTarget());
info2.isSymLink(); // returns false
info2.absoluteFilePath(); // returns "C:/Pretty++/untabify"
info2.size(); // returns 63942
#endif
可以通过path()方法和fileName()方法来提取文件名字的元素信息.fileName()方法可以提取文件名字的baseName,后缀和完整的后缀.QFileInfo对象到Qt类创建的目录不会有拖尾文件分隔符.如果您希望在自己的文件info对象中使用尾随分隔符,只需将其中一个附加到构造函数或setFile()的文件名即可.
这里举个例子:
//Sample:
//使用1/myTest.c.tar.gz文件来构造QFileInfo对象.
QFileInfo info("1/myTest.c.tar.gz");
//获取文件名. myTest.c.tar.gz
QString fileName = info.fileName();
//获取文件相对或绝对路径. 1/myTest.c.tar.gz
QString filePath = info.filePath();
//返回文件的相对或绝对路径.不包括文件名. 1
QString path = info.path();
//返回文件名的最后一个'.'之后的字符串. gz
QString suffix = info.suffix();
//返回文件名第一个'.'之后的所有字符串. c.tar.gz
QString completeSuffix = info.completeSuffix();
//返回文件名第一个'.'之前的字符串. myTest
QString baseName = info.baseName();
//返回文件名最后一个'.'之前的所有字符串. myTest.c.tar
QString completeBaseName = info.completeBaseName();
//返回文件的绝对路径.(不包括文件名)
.C:/Users/Administrator/Desktop/test/test/1
QString absolutePath = info.absolutePath();
//返回文件的绝对路径.(包括文件名)C:/Users/Administrator/Desktop/test/test/1/myTest.c.tar.gz
QString absoluteFilePath = info.absoluteFilePath();
文件的创建时间由created()方法获得,lastModifyed()方法和lastRead()方法获得最后一次修改和阅读的时间.至于文件的访问权限则可以由 isReadable(),
isWritable() and isExecutable()来判断.该文件的所有权可从所有者().ownerId().group()和groupId()获得.您可以使用 permission()函数检查一个文件的权限和所有权.
1.所有函数方法
构造函数:
1.1.1->QFileInfo::QFileInfo()
1.1.2->QFileInfo::QFileInfo(const QString & file)
1.1.3->QFileInfo::QFileInfo(const QFile & file)
1.1.4->QFileInfo::QFileInfo(const QDir & dir, const QString & file)
1.1.5->QFileInfo::QFileInfo(const QFileInfo & fileinfo)
1.1.6->QFileInfo::~QFileInfo()
//返回文件所在目录的绝对路径.作为QDir对象的参数.
1.2->QDir QFileInfo::absoluteDir() const
//返回文件的绝对路径.(包括文件名.)
1.3->QString QFileInfo::absoluteFilePath() const
//返回文件的绝对路径.(不包括文件名.)
1.4->QString QFileInfo::absolutePath() const
//Sample:
QFileInfo info("1/myTest.c.tar.gz");
//返回文件的绝对路径.(不包括文件名)
.C:/Users/Administrator/Desktop/test/test/1
QString absolutePath = info.absolutePath();
//返回文件的绝对路径.(包括文件名)C:/Users/Administrator/Desktop/test/test/1/myTest.c.tar.gz
QString absoluteFilePath = info.absoluteFilePath();
//返回文件名中第一个’.’之前的字符串.
1.5->QString QFileInfo::baseName() const
//返回文件的包名.
1.6->QString QFileInfo::bundleName() const
//判断是否启用了缓存.
1.7->bool QFileInfo::caching() const
//返回规范化路径,包括文件名,即没有符号链接或冗余“.”或“..”元素的绝对路径.
如果该文件不存在,则返回空字符串。
1.8->QString QFileInfo::canonicalFilePath() const
//返回文件的路径规范路径(不包括文件名),即没有符号链接或冗余“.”或“..”元素的绝对路径.如果该文件不存在,则圣路径()返回空字符串.
1.9->QString QFileInfo::canonicalPath() const
//返回文件名最后一个’.’之前的所有字符串.例子看前面.
1.10->QString QFileInfo::completeBaseName() const
//返回文件名第一个’.’之后的所有字符串.
1.11->QString QFileInfo::completeSuffix() const
//返回文件的创建日期和时间.
1.12->QDateTime QFileInfo::created() const
//返回文件相对工作目录的路径作为QDir对象的参数.
1.13->QDir QFileInfo::dir() const
//判断指定文件是否存在.注意:如果文件是指向非现有文件的符号链接,则返回false.
1.14->bool QFileInfo::exists() const
1.14->bool QFileInfo::exists(const QString & file) [static]
//返回文件名.不包括路径.注意,如果这个QFileInfo对象被赋予一条以斜杠结尾的路径,那么文件的名称将被认为是空的.
1.15->QString QFileInfo::fileName() const
//返回文件名以及路径,可能是相对路径也可能是绝对路径,看你的设置.
1.16->QString QFileInfo::filePath() const
//返回文件所在的组的名字,在Windows下会返回空字符串.在Linux/Unix下,会返回相应的用户组名字.
1.17->QString QFileInfo::group() const
1.18->uint QFileInfo::groupId() const
//返回文件的所属用户的名字.同上.
1.19->QString QFileInfo::owner() const
1.20->uint QFileInfo::ownerId() const
//判断文件的路径是否是绝对路径.
1.21->bool QFileInfo::isAbsolute() const
如果这个对象指向一个捆绑包或者在Mac OS X上的一个捆绑包,返回true;否则返回false.
1.22->bool QFileInfo::isBundle() const
//判断是否是文件目录.
1.23->bool QFileInfo::isDir() const
//判断是否可执行.
1.24->bool QFileInfo::isExecutable() const
//判断是否是文件.
1.25->bool QFileInfo::isFile() const
//判断是否被隐藏.
1.26->bool QFileInfo::isHidden() const
//如果文件路径可以直接与本机api一起使用,则返回true.如果该文件由Qt内部的虚拟文件系统支持,如Qt资源系统,则返回false.
1.27->bool QFileInfo::isNativePath() const
//判断是否可读.
1.28->bool QFileInfo::isReadable() const
//判断是否是相对路径.
1.29->bool QFileInfo::isRelative() const
//判断是否是根目录.
1.30->bool QFileInfo::isRoot() const
//判断是否是符号链接.
1.31->bool QFileInfo::isSymLink() const
//判断是否可写.
1.32->bool QFileInfo::isWritable() const
//返回文件最后一次被修改的时间日期.
1.33->QDateTime QFileInfo::lastModified() const
//返回文件最后一次被访问的时间日期.
1.34->QDateTime QFileInfo::lastRead() const
//把文件的相对路径转化为绝对路径.返回是否成功转换.
1.35->bool QFileInfo::makeAbsolute()
//Sample:
QFileInfo info("1/myTest.c.tar.gz");
// 1/myTest.c.tar.gz
QString filePath = info.filePath();
bool ok = info.makeAbsolute();
if (ok)
{
//可以看到转化为绝对路径了.
//C:/Users/TF/Desktop/test/test/1/myTest.c.tar.gz
filePath = info.filePath();
}
//返回文件的路径,不包含文件名.
1.36->QString QFileInfo::path() const
//判断文件权限.
1.37->bool QFileInfo::permission(QFile::Permissions permissions) const
//获得文件的权限.
1.38->QFile::Permissions QFileInfo::permissions() const
//刷新关于文件的属性信息.
1.39->void QFileInfo::refresh()
//如果激活了,则可以缓存文件信息.
1.40->void QFileInfo::setCaching(bool enable)
//修改QFileInfo对象的文件名路径参数.
1.41->void QFileInfo::setFile(const QString & file)
1.41->void QFileInfo::setFile(const QFile & file)
1.41->void QFileInfo::setFile(const QDir & dir, const QString & file)
//返回文件的字节大小.
1.42->qint64 QFileInfo::size() const
//返回文件名最后一个’.’之后的字符串.
1.43->QString QFileInfo::suffix() const
2.性能问题
QFileInfo的一些函数查询文件系统,但出于性能方面的原因,有些函数只对文件名本身进行操作.例如:为了返回相对文件名的绝对路径,绝对路径()必须查询文件系统.然而,path()函数可以直接处理文件名,因此速度更快.
注意:为了提高性能,QFileInfo会缓存有关该文件的信息.
为了提高性能,QFileInfo会缓存有关该文件的信息.因为文件可以由其他用户或程序更改,甚至可以由同一个程序的其他部分进行更改,所以有一个刷新文件信息的函数:refresh().如果您想要关闭QFileInfo的缓存,并强制它每次从它调用set缓存(false)时访问文件系统.