1、臨時文件系統(tǒng)
????????在 Linux 系統(tǒng)中,創(chuàng)建臨時文件系統(tǒng)很簡單,執(zhí)行如下指令即可:
mount -t tmpfs -o size=1024m tmpfs /mnt/tmp
????????掛載成功后,在 /mnt/tmp 這個掛載點下創(chuàng)建的所有文件都將會是臨時文件, 也就是說:當(dāng)電腦關(guān)機之后,這些文件就消失了。
????????這樣做的好處是:不需要硬盤的 I/O 操作,讀寫速度都非???
2、QTemporaryFile類
????????作用:創(chuàng)建臨時文件,臨時文件為輸入文件路徑+符號“.”+6個隨機字符。
????????QTemporaryFile用于安全地創(chuàng)建一個獨一無二的臨時文件。臨時文件通過調(diào)用open()來創(chuàng)建,并且名稱是唯一的(即:保證不覆蓋現(xiàn)有文件),該臨時文件將隨著QTemporaryFile對象的析構(gòu)被刪除。這是一個重要的技術(shù),避免了存儲在臨時文件的應(yīng)用程序數(shù)據(jù)損壞。
2.1、使用示例
#include <QTemporaryFile>
QTemporaryFile file;
if (file.open())
{
// file.close();
qDebug() << "tempPath:" << QDir::tempPath();
qDebug() << "fileTemplate:" << file.fileTemplate(); // 獲得模板路徑
qDebug() << "fileName:" << file.fileName(); // 獲得唯一的名稱
}
結(jié)果:
tempPath: "C:/Users/i/AppData/Local/Temp"
fileTemplate: "C:/Users/i/AppData/Local/Temp/project.XXXXXX"
fileName: "C:/Users/i/AppData/Local/Temp/project.qixEmr
????????a)QTemporaryFile定義后,若未打開或打開失敗,則file.fileName()返回空字符串;
????????b)file.open()創(chuàng)建臨時文件,若失敗則為無權(quán)限或其它原因;
????????c)在調(diào)用close()之后重新打開QTemporaryFile是安全的,只要臨時文件對象還沒有銷毀,臨時文件就一直存在并由QTemporaryFile內(nèi)部保持打開;
????????d)一個臨時文件中會有一些靜態(tài)的部分名稱和唯一的計算部分。默認的文件名由QCoreApplication:applicationName()(否則qt_temp)來決定,被放置到QDir::tempPath()返回的臨時路徑中。如果指定了文件名,相對文件路徑將不會被放置在默認的臨時目錄,但會相對于當(dāng)前的工作目錄;
????????e)指定的文件名可以包含下列模板XXXXXX(6個大寫的“X”字符),將由文件名的自動生成部分來代替,模板是區(qū)分大小寫的,如果模板中不存在文件名,QTemporaryFile會追加生成部分到給定的文件名。
2.2、常用API介紹
????????bool open() :// QTemporaryFile在QIODevice::ReadWrite(讀寫)模式下總是打開的,這方便訪問文件中的數(shù)據(jù)。成功時返回true,將設(shè)置fileName()為唯一的文件名;
????????bool open(OpenMode flags) :?// 重新實現(xiàn)QIODevice::open(),為臨時文件創(chuàng)建一個唯一的文件名,并將其打開。然后通過調(diào)用fileName()來獲得唯一的名稱;
????????bool autoRemove() const?:// 是否是自動刪除模式。
????????void setAutoRemove(bool b) : // 設(shè)置是否為自動刪除模式。默認情況下,自動刪除模式打開。
????????QString fileTemplate() const :// 獲取文件模板。
????????void setFileTemplate(const QString & name)?:// 設(shè)置文件模板。默認文件模板為qcoreappname.XXXXXX,被放置在QDir::tempPath()目錄中。
????????virtual QString fileName() const?:// 重新實現(xiàn)QFileDevice::fileName(),獲取完整的唯一文件名。在QTemporaryFile打開之前,返回值為空,之后將包含fileTemplate(),加上其它的字符使其唯一。
????????QTemporaryFile * createNativeFile(QFile & file) :// 創(chuàng)建本地臨時文件,如果文件不是本地文件,使用QDir::tempPath()創(chuàng)建一個QTemporaryFile,將文件的內(nèi)容復(fù)制給它。如果文件是一個本地文件,返回0,什么都不做。
QFile f(":/resources/file.txt");
QTemporaryFile::createNativeFile(f); // 返回一個QTemporaryFile指針
QFile f("/users/qt/file.txt");
QTemporaryFile::createNativeFile(f); // 返回0
????????QTemporaryFile * createNativeFile(const QString & fileName)?: // 這是一個重載函數(shù),適用于給定的文件名,而不是現(xiàn)有QFile對象。
2.3、使用實例
// 設(shè)置模板名稱
QString strFileName = QDir::tempPath() + QDir::separator() +
QCoreApplication::applicationName() + "_XXXXXX." + "docx";
QTemporaryFile tmpFile(strFileName);
// 設(shè)置為不自動刪除
tmpFile.setAutoRemove(false);
qDebug() << "tempPath : " << QDir::tempPath();
if (tmpFile.open())
{
tmpFile.close();
QString strFileTemplate = tmpFile.fileTemplate();
QString strFileName = tmpFile.fileName();
qDebug() << "fileTemplate : " << strFileTemplate;
qDebug() << "fileName : " << strFileName;
// tmpFile.remove();
}
else
{
qCritical() << "failed to write temporary file";
}
????????注意:為了驗證效果,我們使用了setAutoRemove(false),如果使用完需要刪除臨時文件,可以開啟自動刪除模:setAutoRemove(true),也可以手動刪除:tmpFile.remove()。
3、自定義實現(xiàn)QTemporaryFile類
class CTest; // 聲明
class EnFile
{
public:
EnFile() {};
~EnFile() { release(); };
void release()
{
if (QFile(mFilePath).exists())
QFile(mFilePath).remove();
mFilePath = "";
};
QString path() { return mFilePath; }
private:
QString mFilePath;
void createCachePath()
{
mFilePath = QDir::cleanPath(QDir::tempPath() + QDir::separator() + "b331a2f5652bb73f.temp");
QTemporaryFile tFile(mFilePath);
if (!tFile.open())
{
QString cachePath = QDir::homePath() + "/.cache/";
QDir dir(cachePath);
if (!dir.exists())
dir.mkdir(cachePath);
mFilePath = QDir::cleanPath(cachePath + QDir::separator() + "b331a2f5652bb73f.temp");
}
};
friend class CTest;
//友元類,操作createCachePath()函數(shù)
};
4、QTemporaryDir類
QTemporaryDir dir("logs");
if (dir.isValid())
{
// dir.path() returns the unique directory path
qDebug() << "temp dir = " << dir.path();
}
1、Windows系統(tǒng)中,如何讀寫臨時文件
Windows系統(tǒng)中,如何讀寫臨時文件-51CTO.COM
2、Windows下CreateFile參數(shù)意義
如何使用CreateFile函數(shù)在Windows操作系統(tǒng)中創(chuàng)建新文件?-深圳春合晟輝
3、文件目錄操作(QCoreApplication、QFile、QFileInfo、QDir、QTemporaryDir/File、QFileSystemWatcher)文章來源:http://www.zghlxwxcb.cn/news/detail-693140.html
Qt:42---文件目錄操作(QCoreApplication、QFile、QFileInfo、QDir、QTemporaryDir/File、QFileSystemWatcher)_51CTO博客_qt 文件目錄文章來源地址http://www.zghlxwxcb.cn/news/detail-693140.html
到了這里,關(guān)于qt創(chuàng)建臨時文件的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!