天天看點

《QT5.9 c++ 開發指南》7.3檔案目錄寫法

好長時間沒有記錄了,這個程式寫過了,目的隻是為了記錄其中的一些簡單的用法。

檔案目錄操作相關的類:

  • QCoreApplication :用于提取應用程式路徑 、程式名等檔案資訊 。
  • QFile : 除了打開檔案操作外, QFile 還有複制檔案、删除檔案等功能。
  • QFilelnfo:用于提取檔案的資訊,包括路徑、檔案名、字尾等。
  • QDir:用 于提取目錄或檔案資訊,擷取一個目 錄下的檔案或目錄清單 ,建立或删除目錄和檔案,檔案重命名等操作。
  • QTemporaryDir 和 QTemporaryFile :用于建立 臨時目 錄和臨時檔案。
  • QFileSystemWatcher : 檔案和目錄監聽類 , 監昕目錄下檔案的添加、删除等變化,監昕檔案修改變化 。

 話不多說了讓我們開始:

        先上運作的圖:

《QT5.9 c++ 開發指南》7.3檔案目錄寫法

連結:程式連接配接    提取碼:1obk 

喜歡的小夥伴可以下載下傳此程式,點個贊就可以了

那我們開始分析吧:

QCoreApplication 類:

        QCoreApplication 是為無 GUI 應用提供事件循環的類,是所有應用程式類 的基類,其子類QGuiApplication 為有 GUI 界面的應用程式提供流控制和主要的設定, QGuiApplication 的 子類QApplication 為基于 QWidget 的應用程式提供支援,包括界面的初始化等 。

       QCoreApplication 的有用函數:

  • QString applicationDirPath()       傳回應用程式啟動路徑徑
  • QString applicationFilePath()     運回應用程式的帶有目錄的完整檔案名
  • QString applicationName()        傳回應用程式名稱,無路徑無字尾
  • QString ListlibraryPaths()          傳回動态加載庫檔案時 , 應用程式搜尋的目錄清單
  • void setOrganizationName(QString &orgName)    為應用程式設定個機構名
  • QString organizationName()        傳回應用程式的機構名
  • void exit()                                    退出應用程式

下面讓我們看一下運用代碼吧:

QString str=QCoreApplication::applicationDirPath();
 ui->plainTextEdit->appendPlainText(str+"\n");


QString str=QCoreApplication::applicationFilePath();
ui->plainTextEdit->appendPlainText(str+"\n");

QString str=QCoreApplication::applicationName();
ui->plainTextEdit->appendPlainText(str+"\n");


QStringList strList=QCoreApplication::libraryPaths();
    for (int i=0;i<strList.count();i++)
        ui->plainTextEdit->appendPlainText(strList.at(i));
 ui->plainTextEdit->appendPlainText("");

QString str=QCoreApplication::organizationName();
   ui->plainTextEdit->appendPlainText(str+"\n");
           

QFile 類

QFile 的一些靜态函數:

  • bool copy(QString &fileName, QString &newName)    複制檔案
  • bool rename(QString &oldName, QString &newName)  重命名檔案
  • bool remove(QString & fileName)      删除檔案
  • bool exists(QString & fileName)      判斷檔案是否存在
  • bool setPermissions(QString &fileName , Permissions  permissions)    設定檔案的權限,權限類型是枚舉類型QFi leDevice::Pennission
  • Permissions permissions(QString &fileName)  傳回檔案的權限

QFile 的一些成員函數:

  • void setFileName(QString &name)   設定檔案名 , 檔案己打開後不能再謂用此函數
  • bool copy(QString &newName)    目前檔案複制為 newName 表示的檔案
  • bool rename(QString &newName)    将目前檔案重命名為 newName
  • bool remove()      删除目前檔案
  • booI exists()        判斷目前檔案是否存在
  • bool setPermissions(Permissions permissions)  設定檔案權限
  • Permissions permissions()     傳回檔案的權限
  • qint64 size()       傳回檔案的大小,位元組數
QString sous=ui->editFile->text(); //源檔案
    QFileInfo   fileInfo(sous);//
    QString newFile=fileInfo.path()+"/"+fileInfo.baseName()+"--副本."+fileInfo.suffix();
    QFile::copy(sous,newFile);
    ui->plainTextEdit->appendPlainText("源檔案:"+sous);
    ui->plainTextEdit->appendPlainText("複制為檔案:"+newFile+"\n");




 QString sous=ui->editFile->text(); //源檔案
    QFile   file(sous);

    QFileInfo   fileInfo(sous);//
    QString newFile=fileInfo.path()+"/"+fileInfo.baseName()+"--副本."+fileInfo.suffix();

    file.copy(newFile);
    ui->plainTextEdit->appendPlainText("源檔案:"+sous);
    ui->plainTextEdit->appendPlainText("複制為檔案:"+newFile+"\n");
           
QString sous=ui->editFile->text(); //源檔案
    bool the=QFile::exists(sous);
    if(the)
        ui->plainTextEdit->appendPlainText(+"true \n");
    else
        ui->plainTextEdit->appendPlainText(+"false \n");




QString sous=ui->editFile->text(); //源檔案
    QFile   file(sous);
    bool the=file.exists();
    if(the)
        ui->plainTextEdit->appendPlainText(+"true \n");
    else
        ui->plainTextEdit->appendPlainText(+"false \n");
           
QString sous=ui->editFile->text(); //源檔案
    QFile::remove(sous);
    ui->plainTextEdit->appendPlainText("删除檔案:"+sous+"\n");



QString sous=ui->editFile->text(); //源檔案
    QFile   file(sous);
    file.remove();
    ui->plainTextEdit->appendPlainText("删除檔案:"+sous+"\n");
           

還有很多寫法這裡不再多介紹,請看項目中的程式。

QFilelnfo 類

       QFileinfo 類的接口函數提供檔案的各種資訊 。QFilelnfo 對象建立時可以指定 一個檔案名作為目前檔案,也可以用 setFile()函數指定一個檔案作為目前檔案 。

《QT5.9 c++ 開發指南》7.3檔案目錄寫法
QString sous=ui->editFile->text(); //源檔案
    QFileInfo   fileInfo(sous);//源檔案資訊
    QString newFile=fileInfo.path()+"/"+fileInfo.baseName()+".XYZ"; //更改檔案字尾為".XYZ"
    QFile::rename(sous,newFile); //重命名檔案
    ui->plainTextEdit->appendPlainText("源檔案:"+sous);
    ui->plainTextEdit->appendPlainText("重命名為:"+newFile+"\n");
           

QDir 類

      Dir 是進行目錄操作的類,在建立 QDir 對象時傳遞一個目錄字元串作為目前目錄,然後 QDir函數就可以針對目前目錄或目錄下的檔案進行操作。

《QT5.9 c++ 開發指南》7.3檔案目錄寫法
QString curDir=QDir::currentPath();
    QDir    lastDir(curDir);
    ui->plainTextEdit->appendPlainText("選擇目錄之前:"+lastDir.absolutePath());

    QString aDir=QFileDialog::getExistingDirectory(this,"選擇一個目錄",curDir,QFileDialog::ShowDirsOnly);
    if (aDir.isEmpty())
       return;

    ui->editDir->setText(aDir);
    lastDir.setPath(aDir);
    ui->plainTextEdit->appendPlainText("選擇目錄之後:"+lastDir.absolutePath()+"\n");
           

更多的寫法請看例子。這裡不多介紹。

QTemporaryDir 和 QTemporaryFile

QTemporaryDir的一些成員函數:

  •   void setAutoRemove(bool b)    設定為是否自動删除
  •   QString path()   傳回建立的臨時目錄名稱
  •   bool remove()   删除此臨時目錄及其下面所有檔案

QFileSystemWatcher 類

      QFileSystemWatcher 是對目錄和檔案進行監聽的類。 把某些目錄或檔案添加到 QFileSystemWatcher 對象的監昕清單後 ,當目錄下發生檔案建立 、删除等操作時會發射 directoryChanged ()信号 ,當監聽的檔案發生修改、 重命名等操作時, 會發射 fileChanged()信号。 是以,這個類在進行目錄或檔案監聽時起作用 。

《QT5.9 c++ 開發指南》7.3檔案目錄寫法
ui->plainTextEdit->appendPlainText("監聽目錄:"+ui->editDir->text()+"\n");
    fileWatcher.addPath(ui->editDir->text());//添加監聽目錄
    fileWatcher.addPath(ui->editFile->text());//添加監聽檔案

    QObject::connect(&fileWatcher,&QFileSystemWatcher::directoryChanged,
            this,&Dialog::on_directoryChanged); //directoryChanged
    QObject::connect(&fileWatcher,&QFileSystemWatcher::fileChanged,
            this,&Dialog::on_fileChanged); //fileChanged




fileWatcher.removePath(ui->editDir->text());//
    fileWatcher.removePath(ui->editFile->text());//
    QObject::disconnect(&fileWatcher,&QFileSystemWatcher::directoryChanged,
            this,&Dialog::on_directoryChanged); //directoryChanged
    QObject::disconnect(&fileWatcher,&QFileSystemWatcher::fileChanged,
            this,&Dialog::on_fileChanged); //fileChanged
           

有在頭檔案加上:

private:
    QFileSystemWatcher  fileWatcher;
public slots:
    void on_directoryChanged(const QString path);
    void on_fileChanged(const QString path);
           
void Dialog::on_directoryChanged(const QString path)
{ //directoryChanged()信号的槽函數
    ui->plainTextEdit->appendPlainText(path);
    ui->plainTextEdit->appendPlainText("目錄發生了變化\n");
}

void Dialog::on_fileChanged(const QString path)
{//fileChanged()信号的槽函數
    ui->plainTextEdit->appendPlainText(path);
    ui->plainTextEdit->appendPlainText("檔案發生了變化\n");
}
           

每個函數用法很多,建議把項目下載下傳下來,來學習,讓你盡快的練習,并且去掌握它。一起加油。

繼續閱讀