很高興在雪易的CSDN遇見你?,給你糖糖
歡迎大家加入雪易社區-CSDN社區云?
前言
本文分享QT對文件的操作技術,希望對各位小伙伴有所幫助!
感謝各位小伙伴的點贊+關注,小易會繼續努力分享,一起進步!
你的點贊就是我的動力(^U^)ノ~YO
目錄
前言
1. QFile構造函數
2. QFile常用函數
3. 實操
? ? ? ? 》創建并打開文件.
? ? ? ? 》判斷文件是否存在.
? ? ? ? 》拷貝文件.
? ? ? ? 》給文件重命名
? ? ? ? 》獲取用戶對指定文件的權限,是否可讀
? ? ? ? 》寫入文件
? ? ? ? 》讀取文件數據
? ? ? ? 》刪除文件
? ? ? ? 》獲取文件夾下所有文件
結論:
1. QFile構造函數
QFile(const QString & name)
QFile(QObject * parent)
QFile(const QString & name, QObject * parent)
2. QFile常用函數
??????????????????????????????????? 函數名 | ???????????????????????????????????????????????????????? 功能 |
????????????????????????????????????? copy() | ????????????????????????????????????????????????????? 復制文件 |
???????????????????????????????????? exists() | ?????????????????????????????????????????????? 檢查文件是否存在 |
????????????????????????????????????? open() | ????????????????????????????????????????????????????? 打開文件 |
??????????????????????????????????? remove() | ????????????????????????????????????????????????????? 刪除文件 |
??????????????????????????????????? rename() | ??????????????????????????????????????????????????? 修改文件名 |
???????????????????????????????? setFileName() | ??????????????????????????????????????????????????? 設置文件名 |
?????????????????????????????????????? size() | ????????????????????????????????????????????????????? 文件大小 |
?????????????????????????????????????? pos() | ????????????????????????????????????????????? 文件光標當前位置 |
????????????????????????????????????? seek() | ????????????????????????????????????????????? 設置文件光標位置 |
???????????????????????????????????? atEnd() | ?????????????????????????????????????????? 判斷當前是否為文件尾 |
????????????????????????????????????? read() | ????????????????????????????????????????????????? 讀取文件內容 |
???????????????????????????????????? close() | ????????????????????????????????????????????????????? 關閉文件 |
? ? ? ? 》文件打開模式?
????????????????? 模式 | ?????????????? 值 | ?描述 |
??? QIODevice::NotOpen | ????????? 0x0000 | 不打開 |
??? QIODevice::ReadOnly | ????????? 0x0001 | ?只讀方式 |
??? QIODevice::WriteOnly | ????????? 0x0002 | ?只寫方式,如果文件不存在則會自動創建文件 |
??? QIODevice::ReadWrite | ReadOnly | WriteOnly | 讀寫方式 |
??? QIODevice::Append | ????????? 0x0004 | 此模式表明所有數據寫入到文件尾 |
??? QIODevice::Truncate | ????????? 0x0008 | ?打開文件之前,此文件被截斷,原來文件的所有數據會丟失 |
??? QIODevice::Text | ????????? 0x0010 | 讀的時候,文件結束標志位會被轉為’\n’;寫的時候,文件結束標志位會被轉為本地編碼的結束為,例如win32的結束位’\r\n’ |
??? QIODevice::UnBuffered | ????????? 0x0020 | ??????????????????????????????????????????????????????? 不緩存 |
?
3. 實操
? ? ? ? 》創建并打開文件.
//初始化時加載文件路徑
QFile file("F:/test/xxx.txt");
//以讀寫的方式打開文件,成功返回true,失敗返回false
//想用其他方式打開文件,請看上面的文件打開模式
bool ok = file.open(QIODevice::ReadWrite);
//如果文件不存在,則創建并打開該文件
? ? ? ? 》判斷文件是否存在.
//判斷指定文件是否存在.也可以用來判斷在指定路徑下是否有文件和你將要創建的文件重名.
//存在返回true,不存在返回false
bool exist = QFile::exists("F:/test/xxx.txt");
? ? ? ? 》拷貝文件.
//把D盤里的xxx.txt拷貝到到F盤,命名為sss.txt
//拷貝成功返回true,失敗返回false
bool ok = QFile::copy("D:/xxx.txt", "F:/sss.txt");
? ? ? ? 》給文件重命名
QFile file("F:/xxx.txt");
bool ok = file.rename("F:/sss.txt");?
//重命名成功返回true,失敗返回false
//也可以直接調用
bool ok = QFile::remove("F:/xxx.txt", "F:/sss.txt");
? ? ? ? 》獲取用戶對指定文件的權限,是否可讀
QFlags<QFileDevice::Permission> power = QFile::permissions("F:/xxx.txt");?
//判斷文件所有者是否可讀
if (power.testFlag(QFile::ReadOwner))qDebug("Can Read!");
? ? ? ? 》寫入文件
//定義文件內容字符串
QString str= "寫入文件的內容";
QFile file("F:/xxx.txt");?
//打開文件,不存在則創建
file.open(QIODevice::ReadWrite | QIODevice::Text);
//寫入文件需要字符串為QByteArray格式
file.write(str.toUtf8());
file.close();
? ? ? ? 》讀取文件數據
//先打開文件
QFile file("F:/xxx.txt");
file.open(QIODevice::ReadOnly | QIODevice::Text);//使用QTextStream一行一行讀取文件
QTextStream in(&file);
while (!in.atEnd())
{QString line = in.readLine(); ? ? ?//整行讀取qDebug() << line;
}
? ? ? ? 》刪除文件
QFile file("F:/xxx.txt");
bool ok = file.remove();
//刪除成功返回true,失敗返回false
//也可以直接調用
bool ok = QFile::remove("F:/xxx.txt");
? ? ? ? 》獲取文件夾下所有文件
QDir *dir = new QDir("F:/");
QStringList filters;
filters << "*.png" << "*.jpg" << "*.bmp"; ? ? ? ? ?//過濾器,過濾你想要的文件后綴
//用鏈表保存過濾的文件名
QList<QFileInfo> *fileInfo = new QList<QFileInfo>(dir->entryInfoList(filters));//獲取文件數目、文件名稱
for(int i = 0; i < fileInfo->count(); i++)
{//QFileInfo(路徑名的Qstring字符串).filename可以直接取到路徑中的文件名qDebug() << fileInfo->at(i).fileName();}
結論:
? ? ? ? 本文主要介紹對文件的操作!
感謝各位小伙伴的點贊+關注,小易會繼續努力分享,一起進步!
你的贊賞是我的最最最最大的動力(^U^)ノ~YO