Qt file文件操作詳解

1.引言

很多應用程序都具備操作文件的能力,包括對文件進行寫入和讀取,創建和刪除文件等等,甚至某些應用程序的就是為了操作文件,像WPS Office。基于此Qt框架中專門提供了對文件操作的類:QFile。

2.QFile文件操作

QFile類支持對文件進行讀取和寫入,刪除,重命名,拷貝等常見的文件操作,它既可以操作文本文件,也可以用來操作二進制文件。

在Qt代碼中我們使用QFIle類,需要先引入QFile的頭文件:#include <QFile>。常見QFile類對象時,常見的構造函數有:

QFile()
QFile(QObject *parent)

參數parent 用來指定要操作的目標文件,包含文件的存儲目錄和文件名,存儲路徑可以使用絕對地址(比如"D:/Demo/text.txt")或者相對路徑(比如"./Demo/text.txt")。路徑中的分隔符要用"/"表示。

通常情況下,我們一般調用第二個構造函數來直接指明要操作的文件,對于第一個構造函數而言,我們還需要調用 setFileName()函數來指明要操作的文件。

與C++的讀寫規則一樣,在對文件進行相關操作之前,我們需要先打開文件,打開文件我們使用 open函數。常用的語法格式為:

bool QFile::open(OpenMode Mode);

Mode參數表示不同的打開方式,下列羅列了參數的可選值和及其不同的含義:

打開模式含義
QIODevice::ReadOnly以只讀模式打開文件。
QIODevice::WriteOnly以只寫模式打開文件。如果文件不存在,將創建新文件;如果文件已存在,其內容將被清空。
QIODevice::ReadWrite以讀寫模式打開文件。
QIODevice::Append以追加模式打開文件,寫入的數據將追加到文件末尾,原有內容保留。
QIODevice::Truncate打開文件時清空其內容。通常與 WriteOnlyReadWrite 一起使用。
QIODevice::Text在文本模式下打開文件,處理不同平臺的行結束符(如將 Windows 的 \r\n 轉換為 \n)。
QIODevice::Unbuffered以非緩沖模式打開文件,數據將直接寫入磁盤而不經過緩沖區。

根據需要我們可以一次性選擇多個值,值和值之前使用 |來進行分割,比如:

QIODevice::ReadOnly|QIODevice::Text表示只允許對文件進行讀操作,讀取文件時,會將行尾結束符轉換為 ‘\n’;

QIODevice::WriteOnly|QIODevice::Text表示只允許對文件進行寫操作,將數據寫入文件時,會將行尾結束符轉換為本地格式;

QIODevice::ReadWrite|QIODevice::Text| QIODevice::Append

但選擇的多個值之前不能相互沖突,比如比如 Append 和 Truncate 不能同時使用。

如果文件成功打開,open() 函數返回 true,否則返回 false。

QFile 類提供了很多功能實用的方法,可以快速完成對文件的操作,下表列舉了常用的一些:

qint64 QFile::size() const獲取當前文件的大小。對于打開的文件,該方法返回文件中可以讀取的字節數。
bool QIODevice::getChar(char *c)從文件中讀取一個字符,并存儲到 c 中。讀取成功時,方法返回 true,否則返回 false。
bool QIODevice::putChar(char c)向文件中寫入字符 c,成功時返回 true,否則返回 false。
QByteArray QIODevice::read(qint64 maxSize)從文件中一次性最多讀取 maxSize 個字節,然后返回讀取到的字節。
qint64 QIODevice::read(char *data, qint64 maxSize)從文件中一次性對多讀取 maxSize 個字節,讀取到的字節存儲到 data 指針指定的內存控件中。該方法返回成功讀取到的字節數。
QByteArray QIODevice::readAll()讀取文件中所有的數據。
qint64 QIODevice::readLine(char *data, qint64 maxSize)每次從文件中讀取一行數據或者讀取最多 maxSize-1 個字節,存儲到 data 中。該方法返回實際讀取到的字節數。
qint64 QIODevice::write(const char *data, qint64 maxSize)向 data 數據一次性最多寫入 maxSize 個字節,該方法返回實際寫入的字節數。
qint64 QIODevice::write(const char *data)將 data 數據寫入文件,該方法返回實際寫入的字節數。
qint64 QIODevice::write(const QByteArray &byteArray)將 byteArray 數組中存儲的字節寫入文件,返回實際寫入的字節數。
bool QFile::copy(const QString &newName)將當前文件的內容拷貝到名為 newName 的文件中,如果成功,方法返回 true,否則返回 false。 copy 方法在執行復制操作之前,會關閉源文件。
bool QFile::rename(const QString &newName)對當前文件進行重命名,新名稱為 newName,成功返回 true,失敗返回 false。
bool QFile::remove()刪除當前文件,成功返回 true,失敗返回 false。

3.演示示例

3.1實驗一

img

演示了 QFile 類讀寫文本文件的過程

#include <QFile>
#include <QDebug>
int main(int argc, char *argv[])
{//創建 QFile 對象,同時指定要操作的文件QFile file("D:/demo.txt");//對文件進行寫操作if(!file.open(QIODevice::WriteOnly|QIODevice::Text)){qDebug()<<"文件打開失敗";}//向文件中寫入兩行字符串file.write("hello\r\n");file.write("world");//關閉文件file.close();//重新打開文件,對文件進行讀操作if(!file.open(QIODevice::ReadOnly|QIODevice::Text)){qDebug()<<"文件打開失敗";}//每次都去文件中的一行,然后輸出讀取到的字符串char * str = new char[100];qint64 readNum = file.readLine(str,100);//當讀取出現錯誤(返回 -1)或者讀取到的字符數為 0 時,結束讀取while((readNum !=0) && (readNum != -1)){qDebug() << str;readNum = file.readLine(str,100);}file.close();return 0;
}

3.2實驗二【演示】

img
#include <QFile>
#include <QDebug>
int main(int argc, char *argv[])
{//指定要寫入文件的數據qint32 nums[5]={1,2,3,4,5};//寫入文件之前,要將數據以二進制方式存儲到字節數組中QByteArray byteArr;byteArr.resize(sizeof(nums));for(int i=0;i<5;i++){//借助指針,將每個整數拷貝到字節數組中memcpy(byteArr.data()+i*sizeof(qint32),&(nums[i]),sizeof(qint32));}//將 byteArr 字節數組存儲到文件中QFile file("D:/demo.dat");file.open(QIODevice::WriteOnly);file.write(byteArr);file.close();//再次打開文件,讀取文件中存儲的二進制數據file.open(QIODevice::ReadOnly);QByteArray resArr = file.readAll();//輸出讀取到的二進制數據qDebug()<<"resArr: "<<resArr;//將二進制數據轉化為整數char* data = resArr.data();while(*data){qDebug() << *(qint32*)data;data += sizeof(qint32);}return 0;
}

執行程序,demo.dat 文件中會存儲 {1,2,3,4,5} 這 5 個整數的二進制形式,同時輸出以下內容:

image-20250514104431780

4.QFile+QTextStream

與單獨使用QFile類相比,QTextStream類提供了很多讀寫文件相關的方法,還可以設定寫入到文件的數據格式,比如對齊方式,寫入數據是否帶前綴等等。

使用QTextStream類之前,程序中需要先引入 頭文件。QTextStream提供了很多構造方法,常用的有

am

與單獨使用QFile類相比,QTextStream類提供了很多讀寫文件相關的方法,還可以設定寫入到文件的數據格式,比如對齊方式,寫入數據是否帶前綴等等。

使用QTextStream類之前,程序中需要先引入 頭文件。QTextStream提供了很多構造方法,常用的有

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/80974.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/80974.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/80974.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【測試開發知識儲備】之Jacoco(Java Code Coverage)

文章目錄 Jacoco是什么Jacoco的主要功能&#xff08;一&#xff09;多樣化覆蓋率指標分析&#xff08;二&#xff09; 豐富的報告生成&#xff08;三&#xff09;實時數據收集 Jacoco的工作原理&#xff08;一&#xff09;字節碼增強&#xff08;二&#xff09;測試執行與數據收…

Docker 介紹與使用

Docker 文章目錄 Docker介紹與虛擬機的比較啟動速度占用資源 優勢更容易遷移更容易維護更容易擴展 使用場景持續集成提供可伸縮的云服務搭建微服務架構 鏡像與容器鏡像構成&#xff08;分層結構&#xff09;鏡像與容器的區別 安裝 Docker常用命令介紹鏡像相關容器相關 實戰&…

《AI大模型應知應會100篇》第62篇:TypeChat——類型安全的大模型編程框架

第62篇&#xff1a;TypeChat——類型安全的大模型編程框架 摘要 在構建 AI 應用時&#xff0c;一個常見的痛點是大語言模型&#xff08;LLM&#xff09;輸出的不確定性與格式不一致問題。開發者往往需要手動解析、校驗和處理模型返回的內容&#xff0c;這不僅增加了開發成本&a…

upload-labs通關筆記-第5關 文件上傳之.ini繞過

目錄 一、ini文件繞過原理 二、源碼審計 三、滲透實戰 1、查看提示 2、制作.user.ini文件 &#xff08;1&#xff09;首先創建一個文本文件 &#xff08;2&#xff09;保存文件名為.user.ini 2、制作jpg后綴腳本 &#xff08;1&#xff09;創建一個文本文件 &#xf…

為什么 Linux 上默認沒有 host.docker.internal

在 Linux 環境中&#xff0c;host.docker.internal 是 Docker 為容器提供的一個特殊 DNS 名稱&#xff0c;用于指向宿主機的 IP 地址&#xff08;類似 macOS/Windows 中的行為&#xff09;。但這個功能在 Linux 上默認不啟用&#xff0c;需要手動配置才能使用。以下是詳細解釋和…

C++GO語言微服務和服務發現②

01 創建go-micro項目-查看生成的 proto文件 02 創建go-micro項目-查看生成的main文件和handler ## 創建 micro 服務 命令&#xff1a;micro new --type srv test66 框架默認自帶服務發現&#xff1a;mdns。 使用consul服務發現&#xff1a; 1. 初始consul服務發現&…

Redis--常見數據類型List列表

目錄 一、概念 二、命令 2.1 LPUSH 2.2 LPUSHX 2.3 RPUSH 2.4 RPUSHX 2.5 LRANGE 2.6 LPOP 2.7 RPOP 2.8 LINDEX 2.9 LINSERT 2.10 LLEN 2.11 阻塞版本命令 三、內部編碼 一、概念 列表類型是用來存儲多個有序的字符串&#xff0c;列表中的每個字符串稱為元素&…

QListWedget控件使用指南

QListWedget公共函數 函數簽名功能描述QListWidget(QWidget *parent nullptr)構造函數&#xff0c;創建一個QListWidget對象&#xff0c;可指定父部件&#xff08;默認為nullptr&#xff09;。virtual ~QListWidget()虛析構函數&#xff0c;釋放QListWidget對象及其資源。voi…

Seata源碼—1.Seata分布式事務的模式簡介

大綱 1.Seata分布式事務框架簡介 2.Seata AT模式實現分布式事務的機制 3.Seata AT模式下的寫隔離機制 4.Seata AT模式下的讀隔離機制 5.官網示例說明Seata AT模式的工作機制 6.Seata TCC模式的介紹以及與AT模式區別 7.Seata Saga模式的介紹 8.單服務多個庫的分布式事務…

【Qt】之音視頻編程2:QtAV的使用篇

QtAV 基本播放控制功能實現&#xff08;C & QML&#xff09; QtAV 提供了完整的播放控制 API&#xff0c;支持 播放、暫停、停止、快進快退、截屏 等功能。以下是具體實現方法&#xff1a; 1. C 控制方式 基本播放控制 #include <QtAV> #include <QtAV/AVPlaye…

歌詞滾動效果

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><!-- 設置標簽頁圖標 --><link rel"shortcut icon&…

基于大模型的TIA診療全流程智能決策系統技術方案

目錄 一、多模態數據融合與預處理系統1.1 數據接入模塊1.2 數據預處理偽代碼二、TIA智能預測模型系統2.1 模型訓練流程2.2 混合模型架構偽代碼三、術中智能監測系統3.1 實時監測流程3.2 實時預測偽代碼四、智能診療決策系統4.1 手術方案推薦流程4.2 麻醉方案生成偽代碼五、預后…

Java 日期解析與格式化:從標準格式到自然語言解析

使用 Java 搭配 Apache Commons Lang3 和 Natty 庫&#xff0c;實現靈活高效的日期解析與格式化。 一、背景 將不同格式的日期統一成一個格式。日期格式可能有以下幾種類型&#xff1a; 標準格式&#xff1a;2024-02-28、14/05/2022、2002年5月6日非英文月份縮寫&#xff1a;…

Room持久化庫:從零到一的全面解析與實戰

簡介 在Android開發中,Room作為官方推薦的數據庫持久化庫,提供了對SQLite的抽象層,使得數據庫操作更加安全、高效且易于維護。 Room通過注解處理器和編譯時驗證,顯著降低了數據庫操作的復雜度,同時支持響應式編程模式,使開發者能夠輕松實現數據變化的實時監聽。對于企業…

MySQL(6)如何刪除數據庫和表?

在 MySQL 中刪除數據庫和表是常見的管理操作。下面將詳細介紹如何使用 SQL 語句以及圖形化工具來刪除數據庫和表。 步驟一&#xff1a;連接 MySQL 服務器 首先&#xff0c;連接到 MySQL 服務器&#xff0c;可以使用命令行工具 mysql 或圖形化工具如 MySQL Workbench。 使用命…

攜固態電池、新形態鋼殼疊片電池等產品 豪鵬科技將亮相CIBF 2025

攜固態電池、新形態鋼殼疊片電池等產品 豪鵬科技將亮相CIBF 2025 來源&#xff1a; 電池百人會-電池網 豪鵬科技&#xff08;展位號:14W001&#xff09;將攜固態電池、新形態鋼殼疊片電池及高安全性鈉離子電池等前沿技術產品亮相CIBF 2025&#xff0c;憑借多年的技術積累和產…

React學習———useEffect和useLayoutEffect

useEffect useEffect是React的一個Hook&#xff0c;用于在函數組件中處理副作用。副作用包括數據獲取、訂閱、手動DOM操作以及其他需要再渲染后執行的操作 基本用法 useEffect(() > {// 副作用邏輯return () > {// 可選的清理函數} }, [依賴數組])第一個參數&#xff…

“天神之眼”計算平臺的算力設計(預計500-1000 TOPS)

關于比亞迪“天神之眼”計算平臺的算力設計&#xff08;預計500-1000 TOPS&#xff09;&#xff0c;其技術路徑和行業意義值得深入探討。以下從實現方式、技術挑戰和行業影響三個維度展開分析&#xff1a; 1. 多芯片互聯的技術實現路徑 &#xff08;1&#xff09;芯片選型方案…

FPGA: Xilinx Kintex 7實現PCIe接口

在Xilinx Kintex-7系列FPGA上實現PCIe&#xff08;Peripheral Component Interconnect Express&#xff09;接口&#xff0c;通常使用Xilinx提供的7 Series Integrated Block for PCIe IP核&#xff0c;結合Vivado設計流程。以下是實現PCIe接口的詳細步驟和關鍵點&#xff0c;適…

ArcGIS Desktop使用入門(二)常用工具條——圖形

系列文章目錄 ArcGIS Desktop使用入門&#xff08;一&#xff09;軟件初認識 ArcGIS Desktop使用入門&#xff08;二&#xff09;常用工具條——標準工具 ArcGIS Desktop使用入門&#xff08;二&#xff09;常用工具條——編輯器 ArcGIS Desktop使用入門&#xff08;二&#x…