QDir提供對目錄結構及其內容的訪問。html
QDir經過相對或絕對路徑指向一個文件。網絡
QDir主要成員函數以下:異步
QDir::QDir ( const QDir & dir )ide
QDir::QDir ( const QString & path = QString() )函數
Dir::QDir ( const QString & path, const QString & nameFilter, SortFlags sort = SortFlags( Name | IgnoreCase ),Filters filters = AllEntries )ui
構造函數編碼
QString QDir::absoluteFilePath ( const QString & fileName ) constspa
返回目錄中文件的絕對路徑操作系統
QString QDir::absolutePath () constrest
返回絕對路徑,不包括.和..
bool QDir::cd ( const QString & dirName )
切換到目錄
uint QDir::count () const
返回目錄中文件和目錄的數量
QDir QDir::current () [static]
返回應用程序的當前目錄
QString QDir::currentPath () [static]
返回應用程序當前目錄的絕對路徑
QFileInfoList QDir::entryInfoList(const QStringList & nameFilters, Filters filters = NoFilter, SortFlags sort = NoSort) const
QFileInfoList QDir::entryInfoList(Filters filters = NoFilter, SortFlags sort = NoSort) const
返回目錄中全部文件與目錄的QFileInfo對象鏈表
QStringList QDir::entryList(const QStringList & nameFilters, Filters filters = NoFilter, SortFlags sort = NoSort) const
QStringList QDir::entryList(Filters filters = NoFilter,
SortFlags sort = NoSort) const
返回目錄中全部文件與目錄的名字的鏈表
bool QDir::exists(const QString & name) const
若是name文件存在返回true
bool QDir::exists() const
若是目錄存在,返回true
bool QDir::isAbsolute() const
若是目錄路徑是絕對路徑,返回true
bool QDir::isAbsolutePath(const QString & path) [static]
若是路徑path是絕對路徑,返回true
bool QDir::makeAbsolute()
將目錄路徑轉化爲絕對路徑
bool QDir::mkdir(const QString & dirName) const
建立一個dirNanme的子目錄
bool QDir::mkpath(const QString & dirPath) const
建立dirPath目錄路徑
void QDir::setSorting(SortFlags sort)
設置排序方式
void QDir::setFilter(Filters filters)
設置過濾器
bool QDir::setCurrent(const QString & path) [static]
將path設置爲應用程序的當前工做目錄
bool QDir::remove(const QString & fileName)
刪除文件fileName
bool QDir::rename(const QString & oldName, const QString & newName)
將文件或目錄oldName重命名爲newName
bool QDir::rmdir(const QString & dirName) const
刪除指定目錄dirName
bool QDir::rmpath(const QString & dirPath) const
刪除指定目錄路徑dirPath
QFile提供了讀寫文件的接口,是讀寫文本文件、二進制文件、資源文件的I/O設備。
QT4版本的QIODevice類圖以下:
QT5版本的QIODevice類圖以下:
各個類的用途以下:
QIODevice:全部 I/O 設備類的基類,提供了字節塊讀寫的通用操做以及基本接口;
QFlie:訪問本地文件或者嵌入資源;
QTemporaryFile:建立和訪問本地文件系統的臨時文件;
QBuffer:讀寫 QByteArray;
QProcess:運行外部程序,處理進程間通信;
QAbstractSocket:全部套接字類的父類;
QTcpSocket:TCP 協議網絡數據傳輸;
QUdpSocket:傳輸 UDP 報文;
QSslSocket:使用 SSL/TLS 傳輸數據;
QFileDevice:Qt5 新增長的類,提供了有關文件操做的通用實現。
QProcess、QTcpSocket、QUdpSoctet和QSslSocket是順序訪問設備,QFile、QTemporaryFile和QBuffer是隨機訪問設備。QFile提供了從文件中讀取和寫入數據的能力,QFile主要提供了有關文件的各類操做,好比打開文件、關閉文件、刷新文件等。有關文件自己的信息,好比文件名、文件所在目錄的名字等,則是經過 QFileInfo 獲取。
QFile主要成員函數以下:
QFile::QFile ( const QString & name )
QFile::QFile ( QObject * parent )
QFile::QFile ( const QString & name, QObject * parent )
構造函數
bool QFile::open ( OpenMode mode ) [virtual]
bool QFile::open ( FILE * fh, OpenMode mode )
bool QFile::open ( int fd, OpenMode mode )
打開文件
qint64 QFile::readData(char * data, qint64 len)[virtual protected]
qint64 QFile::readLineData(char * data, qint64 maxlen)[virtual protected]
讀取數據
qint64 QFile::writeData(const char * data, qint64 len)[virtual protected]
寫入數據
void QFile::close () [virtual]
關閉文件
bool QFile::copy(const QString & newName)
拷貝當前文件到newName文件
bool QFile::copy(const QString & fileName,const QString & newName)[static]
拷貝fileName文件到newName文件
bool QFile::exists ( const QString & fileName ) [static]
bool QFile::exists () const
文件是否存在
bool QFile::atEnd () const [virtual]
若是到達文件結束,返回true
QString QFile::fileName () const
返回文件名
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]
重命名文件
void QFile::setFileName ( const QString & name )
設置文件名
void QFile::setDecodingFunction ( DecoderFn function ) [static]
設置解碼函數
void QFile::setEncodingFunction ( EncoderFn function ) [static]
設置編碼函數
QFileInfo提供了獨立與系統的文件信息。
QFileInfo提供了文件系統中文件的名字與路徑、訪問權限和是不是目錄或符號連接的信息。
QDir QFileInfo::absoluteDir() const
返回文件的絕對路徑
QString QFileInfo::absoluteFilePath() const
返回包含文件名的文件的絕對路徑
QString QFileInfo::absolutePath() const
返回不包含文件名的文件的絕對路徑
QString QFileInfo::baseName() const
返回不帶路徑的文件的基本名字,不帶任何文件後綴
QString QFileInfo::completeBaseName() const
返回不帶路徑的文件的完整基本名字,不帶最後一個後綴
QString QFileInfo::completeSuffix() const
返回文件的完整後綴
QDateTime QFileInfo::created() const
返回建立文件的日期和時間
QDir QFileInfo::dir() const
返回對象的父目錄的路徑
QString QFileInfo::fileName() const
返回文件名,不包含路徑
QString QFileInfo::filePath() const
返回包含路徑的文件名
QString QFileInfo::path() const
返回不包括文件名的文件路徑
qint64 QFileInfo::size() const
返回文件的大小
QString QFileInfo::suffix() const
返回文件的後綴
QString QFileInfo::symLinkTarget() const
返回符號連接指向的文件或目錄的絕對路徑
QDataStream 提供了基於 QIODevice 的二進制數據的序列化。數據流是一種二進制流,徹底不依賴於底層操做系統、CPU 或者字節順序(大端或小端)。例如,在安裝了Windows平臺的 PC 上面寫入的一個數據流,能夠不通過任何處理,直接拿到運行了Solaris的SPARC機器上讀取。因爲數據流就是二進制流,所以咱們也能夠直接讀寫沒有編碼的二進制數據,例如圖像、視頻、音頻等。
QDataStream既可以存取C++基本類型,如int、char、short等,也能夠存取複雜的數據類型,例如自定義的類。實際上,QDataStream 對於類的存儲,是將複雜的類分割爲不少基本單元實現的。
數據流和QIODevice緊密配合使用。QIODevice是讀取數據和寫入數據的輸入輸出中介。
寫入二進制數據到流代碼以下:
QFile file("file.dat");
file.open(QIODevice::WriteOnly);
//串行化數據到到文件
QDataStream out(&file);
//串行輸出一個字符串
out << QString("the answer is");
//串行輸出一個整型
out << (qint32)42;
從流中讀取二進制數據:
QFile file("file.dat");
file.open(QIODevice::ReadOnly);
//從文件中串行化讀取數據
QDataStream in(&file);
QString str;
qint32 a;
//從文件中讀物字符串和整型
in >> str >> a;
當輸入輸出複雜類型時,確保讀出流和寫入流的版本相同是很是重要的。若是須要流操做的先後兼容,須要在應用程序在硬編碼版本號。
stream.setVersion(QDataStream::Qt_4_0);
若是要生成新的二進制數據格式,如由應用程序建立的文檔文件格式,可使用QDataStream以兼容格式寫入數據。一般,爲了給程序將來擴展留有餘地,能夠寫入包含魔術字符串和版本號的簡要頭信息。
QFile file("file.xxx");
file.open(QIODevice::WriteOnly);
QDataStream out(&file);
// Write a header with a "magic number" and a version
out << (quint32)0xA0B0C0D0;
out << (qint32)123;
out.setVersion(QDataStream::Qt_4_0);
// Write the data
out << lots_of_interesting_data;
讀取數據的代碼以下:
QFile file("file.xxx");
file.open(QIODevice::ReadOnly);
QDataStream in(&file);
// Read and check the header
quint32 magic;
in >> magic;
if (magic != 0xA0B0C0D0)
return XXX_BAD_FILE_FORMAT;
// Read the version
qint32 version;
in >> version;
if (version < 100)
return XXX_BAD_FILE_TOO_OLD;
if (version > 123)
return XXX_BAD_FILE_TOO_NEW;
if (version <= 110)
in.setVersion(QDataStream::Qt_3_2);
else
in.setVersion(QDataStream::Qt_4_0);
// Read the data
in >> lots_of_interesting_data;
if (version >= 120)
in >> data_new_in_XXX_version_1_2;
in >> other_interesting_data;
當串行化數據時,能夠選擇要使用的字節序。默認設置的字節序是大端。字節序設置爲小端將會破壞兼容性,除非讀取的時候也使用小端。除非有特殊需求,通常使用默認設置的字節序。
直接從流中讀取原生二進制數據使用readRawData()函數,寫入原生二進制數據到流使用writeRawData()函數,但數據的編解碼必須本身完成。
與readRawData()函數不一樣,readBytes()函數讀取一個quint32長度的數據到預分配的內存空間;writeBytes()寫入quint32長度的數據。任何不一樣於quint32長度的數據的編解碼必須本身完成。
QT容器類能夠串行化到QDataStream,包括QList、QLinkedList、QVector、QSet、QHash和QMap。
當在異步設備上使用數據流時,數據中的大部分都能在任意時間點到達。QDataStream實現了使用一系列流操做符自動讀取數據的事務機制。
QDataStream::QDataStream(QIODevice *d)
QDataStream::QDataStream(QByteArray *a, QIODevice::OpenMode mode)
QDataStream::QDataStream(const QByteArray &a)
構造函數
void QDataStream::abortTransaction()
停止一個讀取事務
bool QDataStream::atEnd() const
若是IO設備到達文件或流的結束位置,返回true
ByteOrder QDataStream::byteOrder() const
返回當前字節序設置
bool QDataStream::commitTransaction()
返回一個讀取事務,若是事務中沒有發生讀錯誤,返回true
QIODevice *QDataStream::device() const
返回當前設置的IO設備,若是沒有設置,返回0
FloatingPointPrecision QDataStream::floatingPointPrecision() const
返回數據流的浮點精度
QDataStream &QDataStream::readBytes(char *&s, uint &l)
從流中讀取緩衝區s,返回流的引用
int QDataStream::readRawData(char *s, int len)
從流中讀取至多len字節到緩衝區s,返回讀取的字節數,發生錯誤,返回-1
void QDataStream::resetStatus()
重置數據流的狀態
void QDataStream::rollbackTransaction()
恢復一個讀事務
void QDataStream::setByteOrder(ByteOrder bo)
設置串行化字節序到bo
void QDataStream::setDevice(QIODevice *d)
設置IO設備到d
void QDataStream::setFloatingPointPrecision(FloatingPointPrecision precision)
設置數據流的浮點精度到precision
void QDataStream::setStatus(Status status)
設置數據流的狀態爲給定狀態status
void QDataStream::setVersion(int v)
設置數據串行化的版本到v
爲了適應新的功能,在某些QT版本中,一些QT類數據流串行化格式已經作出了改變。若是想讀取在早期QT版本建立的數據,或是寫只有在早期QT版本編譯的程序中才能讀取的數據,須要修改數據流串行化格式。
int QDataStream::skipRawData(int len)
跳過設備中的len個字節,返回實際跳過的字節數
void QDataStream::startTransaction()
在流中啓動一個新的讀事務
Status QDataStream::status() const
返回數據流的狀態
int QDataStream::version() const
返回數據串行化格式的版本號
QDataStream &QDataStream::writeBytes(const char *s, uint len)
寫長度爲len的緩衝區s到流,返回流的引用
int QDataStream::writeRawData(const char *s, int len)
從s中寫len字節到流
QTextStream爲讀寫文本提供了實用接口。QTextStream能夠操做QIODevice、QByteArray 、QString數據。使用QTextStream的流操做符,能夠方便讀寫字、行、數字。QTextStream支持字段填充、對齊的格式化選項和數字格式化。
QFile data("output.txt");
if (data.open(QFile::WriteOnly | QFile::Truncate))
{
QTextStream out(&data);
out << "Result: " << qSetFieldWidth(10) << left << 3.14 << 2.7;
// writes "Result: 3.14 2.7 "
}
一般使用QTextStream讀取控制檯輸入和寫入控制檯輸出。QTextStream支持本地化,會使用正確codec編×××自動解碼標準輸入。
QTextStream stream(stdin);
QString line;
while (stream.readLineInto(&line))
{
...
}
除了使用QTextStream構造函數,可使用setDevice()或setString()設置流的設備或字符串。使用seek()函數定位位置,若是沒有數據可讀,atEnd()函數會返回true。
QTextStream在內使用基於Unicode編碼的緩衝區,使用QTextCodec編譯碼器自動支持不一樣的字符集。默認,QTextCodec::codecForLocale()用於讀寫,但也能調用setCodec()設置編譯碼器。自動支持Unicode編碼檢測是默認行爲,當讀取的時候,QTextStream會檢測UTF-16或是UTF-32 BOM而且自動選擇合適的編×××。QTextStream默認不會以BOM方式寫,可是能夠調用setGenerateByteOrderMark(true)設置。QTextStream直接操做QString時,編譯碼器codec是失效的。
默認,從文本流中讀取數字時,QTextStream會自動檢測數字的進制。若是數字以0x開頭會被假設爲16進制;數字以1--9開頭,會被假設爲10進制。
QTextStream::QTextStream(QIODevice *device)
QTextStream::QTextStream(FILE *fileHandle, QIODevice::OpenMode openMode = QIODevice::ReadWrite)
QTextStream::QTextStream(QString *string, QIODevice::OpenMode openMode = QIODevice::ReadWrite)
QTextStream::QTextStream(QByteArray *array, QIODevice::OpenMode openMode = QIODevice::ReadWrite)
QTextStream::QTextStream(const QByteArray &array, QIODevice::OpenMode openMode = QIODevice::ReadOnly)
構造函數
bool QTextStream::atEnd() const
流中再也不有數據可讀,返回true
bool QTextStream::autoDetectUnicode() const
若是自動Unicode檢測打開,返回true
QTextCodec *QTextStream::codec() const
返回流的當前的編×××
QIODevice *QTextStream::device() const
返回流關聯的當前設備
FieldAlignment QTextStream::fieldAlignment() const
返回當前的字段對齊方式
int QTextStream::fieldWidth() const
返回當前字段寬度
void QTextStream::flush()
刷新任何在等待的緩衝區數據,寫入到設備
bool QTextStream::generateByteOrderMark() const
當使用UTF編×××時,若是流設置爲UTF BOM,返回true
int QTextStream::integerBase() const
返回整數的進制
QLocale QTextStream::locale() const
返回命令設置語言環境,默認爲C
QChar QTextStream::padChar() const
返回當前的填充字符
QString QTextStream::read(qint64 maxlen)
從流中讀取至多len字節,返回讀取的數據QString
QString QTextStream::readAll()
讀取流中的全部內容
QString QTextStream::readLine(qint64 maxlen = 0)
從流中讀取一行文本,返回的字符串不包含行結束符
容許行的最大長度爲maxlen,若是maxlen爲0,則爲容許任何長度
void QTextStream::setCodec(QTextCodec *codec)
設置流的編×××爲codec
void QTextStream::setCodec(const char *codecName)
設置流的編×××codec爲指定名字codecName的編碼,一般爲ISO 8859-1、UTF-八、UTF-16
void QTextStream::setDevice(QIODevice *device)
設置當前設備到device,若是已經有設備,取代舊的設備
void QTextStream::setFieldAlignment(FieldAlignment mode)
設置字段對齊方式
void QTextStream::setFieldWidth(int width)
設置字段寬度
void QTextStream::setIntegerBase(int base)
設置整數進制
void QTextStream::setLocale(const QLocale &locale)
設置流的本地環境爲locale
void QTextStream::setPadChar(QChar ch)
設置填充字符爲ch
void QTextStream::setString(QString *string, QIODevice::OpenMode openMode = QIODevice::ReadWrite)
設置當前的字符串到string,打開方式爲openMode
QString *QTextStream::string() const
返回流所賦值的字符串,若是沒有字符串,返回0