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中引用相同文件的長文件名和短文件名被視爲引用了不同的文件

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