文章目录
- QFileInfo的详细说明
- QFileInfo的构造函数
- 例子哟
- 公有方法
- 不是判断的函数---------------------------------------------------------
- 1.设置文件路径:setFile()
- setFile(const QString & file)
- setFile(const QFile & file)
- setFile(const QDir & dir, const QString & file)
- 2.获取日期时间等
- 返回文件创建时间和日期:created()
- 返回文件最后一次修改的日期和时间:lastModified()
- 返回最后一次访问文件的日期和时间:lastRead()
- 返回文件大小:size()
- 刷新有关文件的信息:refresh()
- 返回快捷方式的绝对路径:symLinkTarget()
- 3.获取文件名称
- 4.获取文件后缀
- 5.获取文件夹路径(返回的是文件夹对象)
- 6.获取文件路径
- 返回文件路径:filePath()
- 返回文件路径不含文件名:path()
- 返回绝对路径:absolutePath()
- 返回标准路径:canonicalPath()
- 返回带文件名的标准路径:canonicalFilePath()
- 7.其它
- 判断的函数------------------------------------------------------------------
- 判断文件存不存在:exists()
- 判断是否启用文件信息缓存:caching()
- 判断是否是文件:isFile()
- 判断是否是文件夹:isDir()
- 判断是否是隐藏文件:isHidden()
- 判断文件是否可执行:isExecutable()
- 判断用户是否可以读数据:isReadable()
- 判断用户是否可写:isWritable()
- 判断是否是绝对路径:isAbsolute()
- 判断路径是否是相对路径:isRelative()
- 判断对象是否指向一个根目录:isRoot()
- 判断是否指向快捷方式/符号链接:isSymLink()
- 判断路径能否和本机api使用:isNativePath()
- 转换成绝对路径:makeAbsolute()
- 文件权限测试:permission(QFile::Permissions permissions)
- 判断对象是否指向绑定包:isBundle()
- 运算符重载---------------------------------------------------------
QFileInfo是用来获取文件信息的,我们一起来看一下能获取什么,怎么获取这些信息吧!
QFileInfo的详细说明
1.QFileInfo类提供与系统无关的文件信息。
2.QFileInfo提供关于文件系统中文件的名称和位置(路径)、它的访问权限以及它是目录还是符号链接等信息。
3.文件的大小和最后修改/读取时间也可用。
4.QFileInfo还可以用来获取关于Qt资源的信息。
5.QFileInfo可以指向具有相对或绝对文件路径的文件。
6.绝对文件路径以目录分隔符“/”开头(或在Windows中以驱动器规范开头)。相对文件名以目录名开头,并指定相对于当前工作目录的路径。绝对路径的一个例子是字符串“/tmp/quartz”。相对路径可能类似于“src/fatlib”。
7.可以使用isRelative()函数检查QFileInfo使用的是相对文件路径还是绝对文件路径。
8.您可以调用makeAbsolute()函数来转换相对的QFileInfo
9.QFileInfo处理的文件在构造函数中设置,或稍后使用setFile()设置。使用exists()查看文件是否存在,使用size()获取文件大小
10.文件的类型通过isFile()、isDir()和isSymLink()获得。函数的作用是:提供符号链接指向的文件的名称
11.在Unix上(包括Mac OS X),符号链接的大小()与它指向的文件大小相同,因为Unix透明地处理符号链接;类似地,使用QFile打开符号链接可以有效地打开链接的目标
12.在Windows上,符号链接(快捷方式)是.lnk文件。报告的size()是符号链接的大小(不是链接的目标),使用QFile打开符号链接将打开.lnk文件
QFileInfo的构造函数
QFileInfo()
构造一个空的QFileInfo对象。
注意,空的QFileInfo对象不包含任何文件引用
QFileInfo(const QString & file)
构造一个新的QFileInfo,提供有关给定file的信息。该file还可以是绝对路径或相对路径
QFileInfo(const QFile & file)
如果 file有一个相对路径,QFileInfo也将有一个相对路径
QFileInfo(const QDir & dir, const QString & file)
构造一个新的QFileInfo,它在目录dir中提供有关给定文件的信息。
如果dir有一个相对路径,那么QFileInfo也将有一个相对路径
如果文件是绝对路径,那么由dir指定的目录将被忽略
QFileInfo(const QFileInfo & fileinfo)
构造一个新的QFileInfo,它是给定fileinfo的副本
例子哟
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QFileInfo> //引用文件信息头文件
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
//ui界面 转到槽
private slots:
void on_but_getFileName_clicked();
void on_but_getFileSuffix_clicked();
void on_but_getDirPath_clicked();
void on_but_getFilePath_clicked();
void on_IfFun_clicked();
void on_pushButton_clicked();
private:
Ui::Widget *ui;
QFileInfo info; //在这里创建了一个空的文件信息对象
QFileInfo infoTwo;
};
#endif // WIDGET_H
main.cpp不变。。。。。。。。。。。
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QDir> //文件夹类
#include <QDebug> //调试输出类
#include <QDateTime>//时间类
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
//设置文件路径信息
info.setFile("E:/2019/QT/新建文本文档.txt.txt");
//当exists() 返回true,文件存在
if(info.exists())
{
ui->textEdit->setText("文件路径:E:/2019/QT/新建文本文档.txt.txt");
ui->textEdit->append("文本存在");
//文件创建时间
QString str = QString("info.created(): %1")
.arg(info.created().toString("yyyy-MM-dd HH:mm:ss"));
ui->textEdit->append(str);
//文件最后一次修改的时间(返回值是QDateTime类型,所以要引用那个头文件)
str = QString("info.lastModified(): %1")
.arg(info.lastModified().toString("yyyy-MM-dd HH:mm:ss"));
ui->textEdit->append(str);
//文件最后一次打开的时间(返回值是QDateTime类型)
str = QString("info.lastRead(): %1")
.arg(info.lastRead().toString("yyyy-MM-dd HH:mm:ss"));
ui->textEdit->append(str);
//返回文件大小(字节)
str = QString("info.size(): %1")
.arg(info.size());
ui->textEdit->append(str);
//刷新文件
info.refresh();
}
else
{
ui->textEdit->append("文本不存在");
}
}
Widget::~Widget()
{
delete ui;
}
//获取文件名
void Widget::on_but_getFileName_clicked()
{
ui->textEdit->append("\n获取文件名----------------------------");
//返回文件名,获取全部后缀
QString str = QString("info.fileName(): %1").arg(info.fileName());
ui->textEdit->append(str);
//只获取名称不包含任何后缀
str = QString("info.baseName(): %1").arg(info.baseName());
ui->textEdit->append(str);
//当文件后缀大于2个时,只获取第一个后缀,若少于两个则不获取后缀
str = QString("info.completeBaseName(): %1").arg(info.completeBaseName());
ui->textEdit->append(str);
}
//获取文件后缀
void Widget::on_but_getFileSuffix_clicked()
{
ui->textEdit->append("\n获取文件后缀--------------------------");
//获取文件最后一个后缀,后缀不带" . "
QString str = QString("info.suffix(): %1").arg(info.suffix());
ui->textEdit->append(str);
//获取全部后缀,第一个后缀前面不带" . "
str = QString("info.completeSuffix(): %1").arg(info.completeSuffix());
ui->textEdit->append(str);
}
//获取文件夹路径
void Widget::on_but_getDirPath_clicked()
{
ui->textEdit->append("\n获取文件夹路径--------------------------");
//获取文件夹对象(绝对路径)需要包含QDir头文件
QDir MyDir = info.absoluteDir();
QString str = QString("info.absoluteDir().path(): %1").arg(MyDir.path());
ui->textEdit->append(str);
//获取父文件夹对象(相对路径的时候区别很明显)
QDir MyFDir = info.dir();
str = QString("info.dir().path(): %1").arg(MyFDir.path());
ui->textEdit->append(str);
}
//获取文件路径
void Widget::on_but_getFilePath_clicked()
{
ui->textEdit->append("\n获取文件路径--------------------------");
//获取文件完整路径(相对或绝对)
QString str = QString("info.filePath():%1").arg(info.filePath());
ui->textEdit->append(str);
//获取文件路径,不包括文件名
str = QString("info.path():%1").arg(info.path());
ui->textEdit->append(str);
//获取绝对路径
str = QString("info.absolutePath():%1").arg(info.absolutePath());
ui->textEdit->append(str);
//获取带文件名字的绝对路径
str = QString("info.absoluteFilePath():%1").arg(info.absoluteFilePath());
ui->textEdit->append(str);
//获取标准路径
str = QString("info.canonicalPath():%1").arg(info.canonicalPath());
ui->textEdit->append(str);
//获取带名字的标准路径
str = QString("info.canonicalFilePath():%1").arg(info.canonicalFilePath());
ui->textEdit->append(str);
}
//各种判断
void Widget::on_IfFun_clicked()
{
//判断文件存不存在
if(info.exists())
{
ui->textEdit->setText("文件路径:E:/2019/QT/新建文本文档.txt.txt");
ui->textEdit->append("文本存在");
QString str,temp;
//判断是否文件
if(info.isFile())
{
temp = "是文件!";
}
else
{
temp = "不是文件!";
}
str = QString("info.isFile(): %1").arg(temp);
ui->textEdit->append(str);
//判断是否目录
if(info.isDir())
{
temp = "是目录!";
}
else
{
temp = "不是目录!";
}
str = QString("info.isDir(): %1").arg(temp);
ui->textEdit->append(str);
//是否是隐藏文件
if(info.isHidden())
{
temp = "是隐藏的文件!";
}
else
{
temp = "不是隐藏的文件!";
}
str = QString("info.isHidden(): %1").arg(temp);
ui->textEdit->append(str);
//是否可执行文件
if(info.isExecutable())
{
temp = "是可执行的文件!";
}
else
{
temp = "不是可执行的文件!";
}
str = QString("info.isExecutable(): %1").arg(temp);
ui->textEdit->append(str);
//是否用户可读
if(info.isReadable())
{
temp = "是用户可读的文件!";
}
else
{
temp = "不是用户可读的文件!";
}
str = QString("info.isReadable(): %1").arg(temp);
ui->textEdit->append(str);
//是否用户可写
if(info.isWritable())
{
temp = "是用户可写的文件!";
}
else
{
temp = "不是用户可写的文件!";
}
str = QString("info.isWritable(): %1").arg(temp);
ui->textEdit->append(str);
//是否绝对路径
if(info.isAbsolute())
{
temp = "是绝对路径!";
}
else
{
temp = "不是绝对路径!";
}
str = QString("info.isAbsolute(): %1").arg(temp);
ui->textEdit->append(str);
//是否相对路径
if(info.isRelative())
{
temp = "是相对路径!";
}
else
{
temp = "不是相对路径!";
}
str = QString("info.isRelative(): %1").arg(temp);
ui->textEdit->append(str);
//是否指向根目录
if(info.isRoot())
{
temp = "是根路径!";
}
else
{
temp = "不是根路径!";
}
str = QString("info.isRoot(): %1").arg(temp);
ui->textEdit->append(str);
//是否快捷方式/符号链接
if(info.isSymLink())
{
temp = "是快捷方式/符号链接!";
}
else
{
temp = "不是快捷方式/符号链接!";
}
str = QString("info.isSymLink(): %1").arg(temp);
ui->textEdit->append(str);
//路径能否于该机api使用
if(info.isNativePath())
{
temp = "路径可以和本机api使用!";
}
else
{
temp = "路径不可以和本机api使用!";
}
str = QString("info.isNativePath(): %1").arg(temp);
ui->textEdit->append(str);
//相对路径转换成绝对路径
if(info.makeAbsolute())
{
temp = "路径已成功转换成绝对路径!";
}
else
{
temp = "路径转换失败!或者该路径本身就是绝对路径。";
}
str = QString("info.makeAbsolute(): %1").arg(temp);
ui->textEdit->append(str);
//是否启用缓存
if(info.caching())
{
temp = "已启用缓存!";
}
else
{
temp = "没有启用缓存。";
}
str = QString("info.caching(): %1").arg(temp);
ui->textEdit->append(str);
//
info.setCaching(false);
}
else
{
ui->textEdit->append("文本不存在");
}
}
//运算符重载
void Widget::on_pushButton_clicked()
{
infoTwo.setFile("E:/2019/QT/_20190808104216.jpg");
ui->textEdit->setText("info文件路径:E:/2019/QT/新建文本文档.txt.txt");
ui->textEdit->setText("infoTwo文件路径:E:/2019/QT/_20190808104216.jpg");
// != 不等于
if(info != infoTwo)
{
ui->textEdit->append("info根infoTwo不指向同一个文件");
}
else
{
ui->textEdit->append("info根infoTwo指向同一个文件");
}
// = 赋值运算符
infoTwo = info;
QString str(QString("将info赋值给infoTwo后:%1").arg(infoTwo.absoluteFilePath()));
ui->textEdit->append(str);
// == 等于
if(infoTwo == info)
{
ui->textEdit->append("info根infoTwo指向同一个文件");
}
else
{
ui->textEdit->append("info根infoTwo不指向同一个文件");
}
}
QString str = QString(“info.created(): %1”).arg(info.created().toString(“yyyy-MM-dd HH:mm:ss”));
这个使用了字符串格式化
图:
公有方法
不是判断的函数---------------------------------------------------------
1.设置文件路径:setFile()
setFile(const QString & file)
void QFileInfo::setFile(const QString & file)
setFile(const QFile & file)
void QFileInfo::setFile(const QFile & file)
setFile(const QDir & dir, const QString & file)
void QFileInfo::setFile(const QDir & dir, const QString & file)
如果文件包含一个相对路径,那么QFileInfo也将有一个相对路径
设置QFileInfo提供的有关文件的信息。
2.获取日期时间等
返回文件创建时间和日期:created()
QDateTime QFileInfo::created() const
1.在大多数Unix系统中,这个函数返回最后一次状态更改的时间。创建文件时会发生状态更改,但是当用户写入或设置inode信息(例如,更改文件权限)时也会发生状态更改。
2.如果创建时间和“最后状态更改”时间都不可用,则返回与lastModified()相同的时间
返回文件最后一次修改的日期和时间:lastModified()
QDateTime QFileInfo::lastModified() const
返回最后一次访问文件的日期和时间:lastRead()
QDateTime QFileInfo::lastRead() const
1.返回最后一次读取(访问)文件的日期和时间。
2.在这些信息不可用的平台上,返回与lastModified()相同的结果。
返回文件大小:size()
qint64 QFileInfo::size() const
以字节为单位返回文件大小。如果文件不存在或无法获取,则返回0
刷新有关文件的信息:refresh()
void QFileInfo::refresh()
1.刷新有关文件的信息,即在下次获取缓存的属性时从文件系统中读取信息。
2.注意:在Windows CE中,文件系统驱动程序可能会延迟检测文件上的更改
返回快捷方式的绝对路径:symLinkTarget()
QString QFileInfo::symLinkTarget() const
1.返回符号链接(或Windows上的快捷方式)指向的文件或目录的绝对路径,如果对象不是符号链接,则返回空字符串。
2.此名称可能不表示现有文件;它只是一个字符串。如果符号链接指向现有文件,则QFileInfo::exists()返回true
3.获取文件名称
返回文件名称不包括路径:fileName()
QString QFileInfo::fileName() const
返回文件名,获取全部后缀
返回文件名称:baseName()
QString QFileInfo::baseName() const
只获取名称不包含任何后缀
返回文件基名:completeBaseName()
QString QFileInfo::completeBaseName() const
当文件后缀大于2个时,只获取第一个后缀,若少于两个则不获取后缀
QFileInfo fi("/tmp/archive.tar.gz");
QString base = fi.completeBaseName(); // base = "archive.tar"
4.获取文件后缀
返回文件后缀:suffix()
QString QFileInfo::suffix() const
获取文件最后一个后缀,后缀不带" . "
QFileInfo fi("/tmp/archive.tar.gz");
QString ext = fi.suffix(); // ext = "gz"
返回文件完整后缀:completeSuffix()
QString QFileInfo::completeSuffix() const
获取全部后缀,第一个后缀前面不带" . "
5.获取文件夹路径(返回的是文件夹对象)
返回文件夹路径对象:absoluteDir()
QDir QFileInfo::absoluteDir() const
以QDir对象的形式返回文件的绝对路径。
返回父目录的QDir对象:dir()
QDir QFileInfo::dir() const
以QDir对象的形式返回对象的父目录的路径
返回含文件名/目录的绝对路径:absoluteFilePath()
QString QFileInfo::absoluteFilePath() const
1.返回包含文件名的绝对路径
2.绝对路径名由完整路径和文件名组成。在Unix上,它总是以根目录’/'开头。在Windows中,它总是以’D:/‘开头,其中D是一个驱动器字母,但没有映射到驱动器字母的网络共享除外,在这种情况下,路径将以’//sharename/'开头。QFileInfo将大写驱动器字母
6.获取文件路径
返回文件路径:filePath()
QString QFileInfo::filePath() const
返回文件名,包括路径(可能是绝对的或相对的)
返回文件路径不含文件名:path()
QString QFileInfo::path() const
1.返回文件的路径。这并不包括文件名。
2.注意,如果给这个QFileInfo对象一个以斜杠结尾的路径,那么文件的名称将被认为是空的,这个函数将返回整个路径
返回绝对路径:absolutePath()
QString QFileInfo::absolutePath() const
返回文件路径的绝对路径。这并不包括文件名
返回标准路径:canonicalPath()
QString QFileInfo::canonicalPath() const
返回文件的路径规范路径(不包括文件名),即没有符号链接或冗余“.”或“…”元素的绝对路径。
如果文件不存在,canonicalPath()返回一个空字符串
返回带文件名的标准路径:canonicalFilePath()
QString QFileInfo::canonicalFilePath() const
返回包含文件名的规范路径,即没有符号链接或冗余的“.”或“…”元素的绝对路径。
如果文件不存在,canonicalFilePath()将返回一个空字符串
7.其它
返回包的名称:bundleName()
QString QFileInfo::bundleName() const
在Mac OS X上,如果路径是isBundle(),它将返回一个包的正确本地化名称。在所有其他平台上,返回一个空的QString。
Example:
QFileInfo fi("/Applications/Safari.app");
QString bundle = fi.bundleName(); // name = "Safari"
返回文件组:group()
QString QFileInfo::group() const
1.返回文件的组。在Windows上,在文件没有组的系统上,或者在出现错误时,返回一个空字符串。
2.这个函数在Unix下可能很耗时(以毫秒为单位)。
返回文件组ID:groupId()
uint QFileInfo::groupId() const
1.返回文件所属组的id。
2.在Windows和文件没有组的系统中,这个函数总是返回(uint) -2
返回文件的所有者:owner()
QString QFileInfo::owner() const
1.返回文件的所有者。在文件没有所有者的系统上,或者出现错误时,返回一个空字符串。
2.这个函数在Unix下可能很耗时(以毫秒为单位)。
返回文件的所有者ID:ownerId()
uint QFileInfo::ownerId() const
1.返回文件所有者的id。
2.在Windows和文件没有所有者的系统中,这个函数返回((uint) -2)。
返回文件测试权限组合:permissions()
QFile::Permissions QFileInfo::permissions() const
返回QFile::权限的完整OR-ed组合
交换文件信息:swap(QFileInfo & other)
void QFileInfo::swap(QFileInfo & other)
与oher交换文件信息。
改变文件信息缓存:setCaching(bool enable)
void QFileInfo::setCaching(bool enable)
1.如果enable为true,则启用文件信息缓存。如果enable为false,则禁用缓存。
2.当启用缓存时,QFileInfo将在第一次需要时从文件系统中读取文件信息,但通常以后不会这样做
3.默认情况下启用了缓存
判断的函数------------------------------------------------------------------
判断文件存不存在:exists()
bool QFileInfo::exists() const
静态
bool QFileInfo::exists(const QString & file)
如果文件存在,则返回true;否则返回false
判断是否启用文件信息缓存:caching()
bool QFileInfo::caching() const
如果启用了缓存,则返回true;否则返回假
判断是否是文件:isFile()
bool QFileInfo::isFile() const
1.如果该对象指向文件或指向指向文件的符号链接,则返回true。
2.如果对象指向的不是文件,例如目录,则返回false
判断是否是文件夹:isDir()
bool QFileInfo::isDir() const
如果该对象指向某个目录或指向指向某个目录的符号链接,则返回true;否则返回假
判断是否是隐藏文件:isHidden()
bool QFileInfo::isHidden() const
如果这是一个“隐藏”文件,则返回true;否则返回假
判断文件是否可执行:isExecutable()
bool QFileInfo::isExecutable() const
如果文件是可执行的,则返回true;否则返回false
判断用户是否可以读数据:isReadable()
bool QFileInfo::isReadable() const
如果用户可以读取文件,则返回true;否则返回false
判断用户是否可写:isWritable()
bool QFileInfo::isWritable() const
如果用户可以写入文件,则返回true;否则返回false。
判断是否是绝对路径:isAbsolute()
bool QFileInfo::isAbsolute() const
如果文件路径名是绝对的,则返回true;如果路径是相对的,则返回false
判断路径是否是相对路径:isRelative()
bool QFileInfo::isRelative() const
如果文件路径名是相对的,则返回true;如果路径是绝对的,则返回false(例如,在Unix下,如果路径以“/”开头,则返回绝对)
判断对象是否指向一个根目录:isRoot()
bool QFileInfo::isRoot() const
如果对象指向某个目录或指向指向某个目录的符号链接,且该目录是根目录,则返回true;否则返回假
判断是否指向快捷方式/符号链接:isSymLink()
bool QFileInfo::isSymLink() const
1.如果该对象指向一个符号链接(或指向Windows上的快捷方式),则返回true;否则返回假
2.在Unix(包括Mac OS X)上,打开一个符号链接可以有效地打开该链接的目标。在Windows上,它会打开.lnk文件本身。
判断路径能否和本机api使用:isNativePath()
bool QFileInfo::isNativePath() const
1.如果文件路径可以直接与本机api一起使用,则返回true。如果文件被Qt内部的虚拟文件系统(如Qt资源系统)支持,则返回false
2.注意:本机路径可能仍然需要转换路径分隔符和字符编码,这取决于本机API的平台和输入要求
转换成绝对路径:makeAbsolute()
bool QFileInfo::makeAbsolute()
将文件路径转换为绝对路径(如果它还没有以那种形式存在)。返回true,表示转换了路径;否则返回false,表示路径已经是绝对路径
文件权限测试:permission(QFile::Permissions permissions)
bool QFileInfo::permission(QFile::Permissions permissions) const
1.文件权限测试。权限参数可以是类型QFile:: permissions的几个标志,也可以一起使用,以检查权限组合。
2.在文件没有权限的系统上,这个函数总是返回true
QFileInfo fi("/tmp/archive.tar.gz");
if (fi.permission(QFile::WriteUser | QFile::ReadGroup))
qWarning("I can change the file; my group can read the file");
if (fi.permission(QFile::WriteGroup | QFile::WriteOther))
qWarning("The group or others can change the file");
判断对象是否指向绑定包:isBundle()
bool QFileInfo::isBundle() const
如果该对象指向绑定包或指向指向Mac OS X上绑定包的符号链接,则返回true;否则返回假
运算符重载---------------------------------------------------------
判断两者不等:
bool QFileInfo::operator!=(const QFileInfo & fileinfo) const
如果此QFileInfo对象引用的文件与fileinfo指定的文件不同,则返回true;否则返回false
拷贝:
QFileInfo & QFileInfo::operator=(const QFileInfo & fileinfo)
复制给定的fileinfo并将其分配给QFileInfo。
拷贝2:
QFileInfo & QFileInfo::operator=(QFileInfo && other)
将other分配给这个QFileInfo实例
判断两者相等
bool QFileInfo::operator==(const QFileInfo & fileinfo) const
1.如果此QFileInfo对象引用与fileinfo相同位置的文件,则返回true;否则返回false。
2.注意,比较两个不包含任何文件引用(不存在或为空的文件路径)的空QFileInfo对象的结果是未定义的。
3.警告:这不会比较指向同一个文件的两个不同的符号链接。
4.警告:在Windows中引用相同文件的长文件名和短文件名被视为引用了不同的文件