Qt的QFileInfo

文章目录


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中引用相同文件的长文件名和短文件名被视为引用了不同的文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章