QT學習之文件系統讀寫類

#QT學習之文件系統讀寫類

QIODevice

  • QFileDevice
  • QBuffer
  • QProcessQProcessEnvironment

QFileDevice

  • QFile
  • QFileInfo

##QT5 Input/Output 類圖

###QFile

QFile 類用來對文件的操做:安全

頭文件 #include <QFile>
模塊 QT += core
基類 QFileDevice.
子類 QTemporaryFile

使用QFile能夠打開關閉文件,並對文件進行處理。其主要使用方法有:函數

  • 文件的讀寫
QString text;
QFile read(oldPath);
if(!read.exists())return;
if(read.open(QIODevice::ReadOnly)){
    text=read.readAll();
}
read.close();

QFile write(newPath);
if(write.open(QIODevice::WriteOnly)){
    write.write(text,qstrlen(text));
}
write.close();
  • 文件的讀寫--使用流
QString text;
QFile read(oldPath);
if(!read.exists())return;
if(read.open(QIODevice::ReadOnly)){
    QTextStream in(&read);  //使用流進行讀寫
    in.setCodec("UTF-8");   //設置讀時編碼
    text=in.readAll();      //使用流讀取所有文件
}
read.close();

QFile write(newPath);
if(write.open(QIODevice::WriteOnly)){
    QTextStream out(&write);
    out.setCodec("UTF-8");
    out<<text;
}
write.close();
  • 複製文件
QFile::copy(oldFilePath,newFilePath);
//其中oldFilePath文件必須存在,newFilePath的路徑中不能包含不存在的路徑!
  • 刪除文件
bool QFile::remove()
bool QFile::remove(const QString & fileName) [static]
  • 給文件重命名
bool QFile::rename(const QString & newName)
bool QFile::rename(const QString & oldName, const QString & newName) [static]
  • 爲新文件建立路徑
QDir dir;
dir.mkpath(dirpath);    
//建立新目錄,dirpath中的全部未建立的子文件夾都將被建立
dir.setPath(dirCur);//設置當前路徑
dir.mkdir(dirName);
//建立子目錄,在當前目錄下建立一個子文件夾dirName

QFileInfo類處理文件的信息,構造函數:

QFileInfo()
QFileInfo(const QString & file)
QFileInfo(const QFile & file)
QFileInfo(const QDir & dir, const QString & file)
QFileInfo(const QFileInfo & fileinfo)

經常使用方法,假設文件爲:"E:/dirPath/fileName.sfx"學習

  • 獲取文件名,包含後綴
QString    fileName() const  // 返回值爲: "fileName.sfx"
  • 獲取文件路徑,到文件所在當前目錄,不包含最後的 "/"
QString    filePath() const  // 返回值爲: "E:/dirPath"
QDir    dir() const
  • 獲取文件後綴,不包括 "."
QString    suffix() const    // 返回值爲:  "sfx"
  • 判斷文件是否存在,通常處理文件以前,都應先調用此方法
bool    exists() const
  • 返回文件的絕對路徑
QString QFileInfo::absoluteFilePath() const  // 返回包括文件名的絕對路徑。
QString QFileInfo::absolutePath() const   // 返回不包括文件名的絕對路徑。
QDir QFileInfo::absoluteDir() const
  • 返回文件的基名稱
QString QFileInfo::baseName() const
eg:
    QFileInfo fi("/tmp/archive.tar.gz");
    QString base = fi.baseName();  // base = "archive"

QDir 類處理有關文件目錄路徑問題,構造函數

QDir(const QDir & dir)
QDir(const QString & path = QString())
QDir(const QString & path, const QString & nameFilter, SortFlags sort = SortFlags( Name | IgnoreCase ), Filters filters = AllEntries)
  • 獲取目錄內指定後綴的文件,獲取的文件的路徑(絕對路徑)
QFileInfoList QDir::entryInfoList(const QStringList & nameFilters, Filters filters = NoFilter, SortFlags sort = NoSort) const
eg:
    QStringList fileList;
    fileList<<"*.xml"<<"*.txt"; //只顯示xml文檔和txt文檔
    QDir dir;
    dir.setPath(dirPath);
    if(!dir.exists())return;
    //設置目錄下顯示的內容,這裏只顯示文件,不顯示文件夾
    dir.setFilter(QDir::Files); 
    //設置目錄下文件的排序方式,這裏爲按名稱排序
    dir.setSorting(QDir::Name);
    //設置過濾字段
    dir.setNameFilters(fileList);
    //獲取目錄下對應文件
    QFileInfoList list = dir.entryInfoList();

###QSaveFile

QSaveFile類是爲了安全的進行寫操做而設計的,用來寫入文本和二進制數據到文件中,當寫入操做失敗時,不會丟失要寫入的數據。
  當要寫入數據時,會先創建一個臨時的文件保存要寫入的數據。若是在寫入過程當中沒有錯誤發生,則使用commit() 提交到最終要寫入的文件中去。這種機制確保了一旦發生寫入錯誤,寫入的文件中不會沒有數據。而且沒有部分寫入的文件老是出如今最後的位置。當向磁盤寫入文檔時常常使用此類。
QSaveFile會在寫入過程當中自動的檢查錯誤。能夠像QFile類那樣來進行操做文件,使用 open() 打開文件,也可使用繼承自QIODevice 類的方法操做。但不能使用close(),而是使用commit()!因爲應用程序出錯致使的呼叫 cancelWriting(),即便調用 commit() 也不會進行保存。
其自身Public 方法:this

QSaveFile(const QString & name)
QSaveFile(QObject * parent = 0)
QSaveFile(const QString & name, QObject * parent)
~QSaveFile()
void    cancelWriting()
bool    commit()
bool    directWriteFallback() const
void    setDirectWriteFallback(bool enabled)
void    setFileName(const QString & name)

###QTemporaryDir

QTemporaryDir用於安全的創建一個臨時的目錄,目錄名由類構造函數自動生成。使用 QString path() const 獲取路徑。
其自身公用方法有:編碼

QTemporaryDir()
QTemporaryDir(const QString & templatePath)
~QTemporaryDir()
bool    autoRemove() const
bool    isValid() const
QString    path() const
bool    remove()
void    setAutoRemove(bool b)

QT給出的列子:設計

// Within a function/method...

    QTemporaryDir dir;
    if (dir.isValid()) {
        // dir.path() returns the unique directory path
    }

    // The QTemporaryDir destructor removes the temporary directory
    // as it goes out of scope.

###QTemporaryFile

QTemporaryFile用於安全的建立一個臨時文件。調用open()時自動建立。自身公共方法有:code

QTemporaryFile()
QTemporaryFile(const QString & templateName)
QTemporaryFile(QObject * parent)
QTemporaryFile(const QString & templateName, QObject * parent)
~QTemporaryFile()
bool    autoRemove() const
QString    fileTemplate() const
bool    open()
void    setAutoRemove(bool b)
void    setFileTemplate(const QString & name)

QT給出的使用列子:xml

// Within a function/method...

    QTemporaryFile file;
    if (file.open()) {
        // file.fileName() returns the unique file name
    }

    // The QTemporaryFile destructor removes the temporary file
    // as it goes out of scope.

###QDirIterator

QDirIterator用於遍歷目錄,無基類!blog

Constant Value Description
QDirIterator::NoIteratorFlags 0x0 默認狀況,迭代器將返回指定目錄的條目
QDirIterator::Subdirectories 0x2 列出指定目錄的全部子條目(包括子目錄下的目錄)
QDirIterator::FollowSymlinks 0x1 Subdirectories條件下忽略符號連接 "." 或者 ".."

其自身公有方法:排序

QDirIterator(const QDir & dir, IteratorFlags flags = NoIteratorFlags)
QDirIterator(const QString & path, IteratorFlags flags = NoIteratorFlags)
QDirIterator(const QString & path, QDir::Filters filters, IteratorFlags flags = NoIteratorFlags)
QDirIterator(const QString & path, const QStringList & nameFilters, QDir::Filters filters = QDir::NoFilter, IteratorFlags flags = NoIteratorFlags)
~QDirIterator()
QFileInfo    fileInfo() const
QString    fileName() const
QString    filePath() const
bool    hasNext() const
QString    next()
QString    path() const

QT給出的例子:

QDirIterator it("/etc", QDirIterator::Subdirectories);
while (it.hasNext()) {
    qDebug() << it.next();

    // /etc/.
    // /etc/..
    // /etc/X11
    // /etc/X11/fs
    // ...
}

###QStandardPaths

QStandardPaths用於處理系統標準路徑。

QString    displayName(StandardLocation type)
QString    findExecutable(const QString & executableName, const QStringList & paths = QStringList())
QString    locate(StandardLocation type, const QString & fileName, LocateOptions options = LocateFile)
QStringList    locateAll(StandardLocation type, const QString & fileName, LocateOptions options = LocateFile)
void    setTestModeEnabled(bool testMode)
QStringList    standardLocations(StandardLocation type)
QString    writableLocation(StandardLocation type)

enum    LocateOption { LocateFile, LocateDirectory }
flags    LocateOptions
enum    StandardLocation { DesktopLocation, DocumentsLocation, FontsLocation, ApplicationsLocation, ..., GenericConfigLocation }

##QT Dialogs類圖

這裏只簡單說一下QFileDialog類:

頭文件 #include <QFileDialog>
模塊 QT += widgets
基類 QDialog

經常使用靜態成員函數:

  • 打開一個獲取目錄的對話框
QString    getExistingDirectory( QWidget * parent = 0, const QString & caption = QString(), const QString & dir = QString(), Options options = ShowDirsOnly)
QUrl       getExistingDirectoryUrl( QWidget * parent = 0, const QString & caption = QString(), const QUrl & dir = QUrl(), Options options = ShowDirsOnly, const QStringList & supportedSchemes = QStringList())
  • 打開一個選擇文件的對話框
QString        getOpenFileName( QWidget * parent = 0, const QString & caption = QString(), const QString & dir = QString(), const QString & filter = QString(), QString * selectedFilter = 0, Options options = 0)
QStringList    getOpenFileNames(QWidget * parent = 0, const QString & caption = QString(), const QString & dir = QString(), const QString & filter = QString(), QString * selectedFilter = 0, Options options = 0)
QUrl       getOpenFileUrl( QWidget * parent = 0, const QString & caption = QString(), const QUrl & dir = QUrl(), const QString & filter = QString(), QString * selectedFilter = 0, Options options = 0, const QStringList & supportedSchemes = QStringList())
QList<QUrl>    getOpenFileUrls( QWidget * parent = 0, const QString & caption = QString(), const QUrl & dir = QUrl(), const QString & filter = QString(), QString * selectedFilter = 0, Options options = 0, const QStringList & supportedSchemes = QStringList())
  • 打開另存爲對話框,返回另存爲文件的全路徑地址
QString    getSaveFileName( QWidget * parent = 0, const QString & caption = QString(), const QString & dir = QString(), const QString & filter = QString(), QString * selectedFilter = 0, Options options = 0)
QUrl       getSaveFileUrl( QWidget * parent = 0, const QString & caption = QString(), const QUrl & dir = QUrl(), const QString & filter = QString(), QString * selectedFilter = 0, Options options = 0, const QStringList & supportedSchemes = QStringList())

其中 QString & filter = QString() 表明文件過濾器,寫法以下:

QStringList ls=
    QFileDialog::getOpenFileNames(this
                        ,tr("選用文件")
                        ,QStandardPaths::standardLocations(QStandardPaths::DesktopLocation).at(0)
                        ,tr("XML文件 (*.xml);;文本文件(*.txt"));
相關文章
相關標籤/搜索