學習C++、QT---21(QT中QFile庫的QFile讀取文件、寫入文件的講解)

每日一言

????????把大目標拆成小步,每天前進一點點,終會抵達終點。

QFile讀取文件

我們記事本要進行讀取文件、寫入文件、等等的操作,那么這個時候我們的QT有一個QT類叫做QFile這個類的話是專門對于文件操作的,所以我們來學習

我們在QT的幫助文檔這邊進行查看,會發現這邊包含了幾個公共的函數,那么他們之間有什么聯系呢?

二、QFile?與?setFileName?的關系

  1. 關聯文件路徑的方式
    QFile?要操作文件,得知道文件路徑。有兩種常見方式:
    1. 構造時指定:通過帶?name?參數的構造函數,比如?QFile(const QString &name)?,創建對象時就確定好要操作的文件

例如QFile file("test.txt");?,后續對?file?的操作就圍繞?test.txt?這個文件。

    1. 先創建對象再設置:先用無參構造(QFile()?)或者帶父對象的構造(QFile(QObject *parent)?)創建?QFile?對象,此時對象還沒關聯具體文件,接著調用?setFileName?函數傳入文件路徑,來建立關聯,例如:

???QFile file;

??file.setFileName("test.txt");

之后就可以用 file 操作 test.txt 文件,比如打開、讀寫等

  1. 存在的意義
    setFileName?提供了靈活設置文件路徑的能力。有些場景下,創建?QFile?對象時還不確定要操作哪個文件(比如文件路徑由用戶后續選擇、從配置中讀取等 ),就可以先創建對象,后續再用?setFileName?來指定,讓代碼邏輯更靈活。

這個是我們的運行結果,我們使用創建對象的方法,對象調用這個setFileName(“文件地址”)。

file.open(以怎么樣的方式打開)

Open的模式在這個QIODevice這個類里面

我們找到后會發現,有可讀可寫,追加等等方式,那么我們這邊選擇只讀和Text,這個Test這個的話是什么意思呢?就是簡單來說,就是 Qt 幫開發者處理了不同平臺換行符不一致的問題,讓文本的讀寫在跨平臺場景下更順暢,減少了因換行符差異帶來的適配工作量 。

那么我們通過管道(按位或)來進行連接

  • |(按位或):用于組合多個選項,是打開文件時的正確寫法。

我們打開后需要進行讀取操作使用file.read()

這個操作就是,我們可以知道read里面的參數填什么,看到需要填寫一個是數組指針,一個是長度

  • 參數
    • data:指向用于存儲讀取數據的 ** 字符數組(緩沖區)** 的指針。
    • maxSize:指定最多讀取的字節數,即緩沖區的最大容量。

那么我們進行定義一個數組,將數組名傳進去,這邊的話我們需要對數組進行初始化,那我們就都初始化為\0吧,空字符

//在?C/C++?里,當你對數組進行部分初始化時(也就是只顯式初始化數組的部分元素),剩余未顯式初始化的元素會被編譯器自動初始化為對應類型的?“零值”?

  • read()?的作用:將文件內容直接復制到?context?數組的內存空間中。
    例如,若文件內容是?"Hello\nWorld!"(共 12 字節),則?context?數組的前 12 個字節會被填充為對應的字符編碼(如 UTF-8),后續字節保持為?'\0'

qDebug()?如何輸出內容?

C 風格字符串的特性
context?是一個?char*?類型的指針,指向數組的首地址。qDebug()?會將其視為以?'\0'?結尾的 C 風格字符串,并從首地址開始逐字節讀取,直到遇到第一個?'\0'?為止。

好的,那么我們的文件會其實是會打開失敗的啊

我們進行了一個判斷,為什么可以這樣判斷?

因為

?Qt 的?QFile::open()

在 Qt 中,QFile::open()?返回bool

  • 成功打開:返回true
  • 打開失敗:返回false,可通過QFile::error()獲取具體錯誤類型。

所以我們就直接如果返回值為!1的那我們就輸出錯誤信息file open error。

還有這個read這個是失敗返回-1的,所以我們就可以當==-1的時候,我們就直接退出程序。

還有一種寫法是這樣的

?

QFile寫入文件

這個寫入文件的話也是一樣的操作,路徑、打開文件、寫入內容、關閉資源

不同的就是這個open的打開方式改為關于寫的,我這邊是只寫WriteOnly

然后我們看到上方的框框 ,我點擊寫入文件的話,如果我在這個路徑上面沒有這個文件的話就會創建一個這個文件,然后寫入了我寫的話,我們這個write的參數是可以填寫三個,一個是字符數組(c風格字符串),QByteArray、還有一個是字符串加上存入的指定的大小

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

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

相關文章

AD736ARZ-R7精密真有效值轉換器 高精度測量的首選方案

AD736ARZ-R7精密轉換器產品概述AD736ARZ-R7是ADI(Analog Devices Inc.)推出的一款低功耗、高精度的真有效值(RMS)轉直流(DC)轉換器,采用SOIC-8封裝,適用于需要精確測量交流或復雜波形…

【web應用】若依框架前端報表制作與導出全攻略(ECharts + html2canvas + jsPDF)

文章目錄前言一、ECharts準備工作1. 檢查ECharts安裝2. 導入ECharts3. 創建餅圖組件4. 模板部分二、報表導出功能實現1. 安裝依賴2. 導入依賴3. 完整導出函數實現4. 樣式優化三、完整組件實現四、常見問題與解決方案1. 圖表截圖不完整或模糊2. 圖表背景透明3. 導出PDF中文亂碼4…

vue3+express聯調接口時報“\“username\“ is required“問題

我用node .js的express框架寫的登錄接口,發現postman可以調通,但是vue3前端報錯vue3我發現是我后端node.js的app.js入口文件中配置的解析前端參數的解析中間件和前端請求頭中的Content-Type配置不一致的原因 解決方案 因為我后端配置解析表單數據的中間件…

《月亮與六便士》:天才的背叛與凡人救贖的殘酷辯證法

當滿地六便士成了庸人的火葬場??毛姆筆下的斯特里克蘭德,是一把捅穿中產幻夢的利刃。這個拋妻棄子、背叛友人的證券經紀人,在倫敦客廳的茶香與銀勺碰撞聲中,突然聽見了遠方的驚雷——“我必須畫畫”。如書中所言:??“在滿地都…

vue2往vue3升級需要注意的點(個人建議非必要別直接升級)

將 Vue 2 項目升級到 Vue 3 的過程中,需要重點關注以下幾個難點和關鍵點: 建議小項目直接用vue3重寫更快,bug更少 文章目錄1. **Composition API 的學習與應用**2. **全局 API 的變更**3. **模板語法的兼容性變化**4. **組件選項和生命周期的…

聚焦數據資源建設與應用,浙江省質科院赴景聯文科技調研交流

7月10日上午,浙江省質科院標準化中心副主任蔣建平、應珊婷等一行領導帶隊蒞臨景聯文科技調研指導工作。雙方圍繞工業數據展開深度交流。座談會上,景聯文科技詳細匯報了數據資源建設與應用方面的成果與規劃,介紹了公共數據授權運營與對外合作的…

【Linux】系統引導修復

目錄 開機引導過程 一.通電 二.BIOS環境檢測 三.磁盤引導階段 四.文件引導階段 自動引導配置文件丟失修復 內核參數文件丟失修復 內核鏡像文件丟失修復 內核初始化文件丟失修復 boot目錄誤刪丟失修復 開機引導過程 磁盤引導階段 /boot/grub2/grub.cfg #讀取自動引…

2023年全國青少年信息素養大賽C++編程初中組決賽真題+答案解析

2023年全國青少年信息素養大賽C++編程初中組決賽真題+答案解析 編程題 第一題 判斷是否存在重復的子序列 題目描述 從m 個字符中選取字符,生成n 個符號的序列,使得其中沒有2 個相鄰的子序列相同? 如從1,2,3,生成長度為5 的序列,序列“12321”是合格的,而“12323”和“12123”…

MySQL5.78.0鎖表確認及解除鎖表完全指南

目錄 一、MySQL鎖機制基礎 1.1 鎖的分類與作用 1.2 關鍵鎖類型詳解 二、鎖表的常見原因與風險 2.1 引發鎖表的典型場景 2.2 鎖表的業務影響 三、鎖表狀態確認方法 3.1 基礎工具:SHOW PROCESSLIST 3.2 MySQL 8.0鎖信息查詢(推薦) 3.2…

springboot生成pdf方案之dot/html/圖片轉pdf三種方式

文章目錄pdf生成方案dot轉pdfhtml轉pdfopenhtmltopdfaspose-pdf實踐playwright實踐圖片轉pdfApache PDFBox實踐框架場景匹配后記前言:隨著客戶對報告審美的提升,需求也越來越五彩斑斕~ 原有的dot模板已經滿足不了他們了!這篇文章主打列出各種…

前端開發—全棧開發

全棧開發者在面試前端或全棧崗位時,自我介紹需要巧妙融合“技術廣度”與“崗位針對性”,避免成為泛泛而談的“樣樣通樣樣松”。以下是結合面試官關注點和全棧特性的專業介紹策略:🧠 一、自我介紹的核心理念 突出全棧優勢&#xff…

Redis生產環境過期策略配置指南:務實落地,避免踩坑

在生產環境中合理配置Redis過期策略是保障系統穩定性和內存效率的關鍵。以下配置建議基于實戰經驗,避免理論堆砌,直擊核心要點:一、核心策略配置:惰性刪除 定期刪除(默認已啟用)無需額外配置:R…

Ubuntu 20.04 安裝 Node.js 20.x、npm、cnpm 和 pnpm 完整指南

🌐 Ubuntu 20.04 安裝 Node.js 20.x、npm、cnpm 和 pnpm 完整指南 🚀 在本文中,我們將介紹如何在 Ubuntu 20.04 上安裝 Node.js 20.x,以及如何安裝 npm、cnpm 和 pnpm 來提高開發效率 ?。1?? 安裝 Node.js 20.x 為了確保使用最…

【時時三省】(C語言基礎)通過指針引用數組元素

山不在高,有仙則名。水不在深,有龍則靈。 ----CSDN 時時三省引用一個數組元素,可以用下面兩種方法:( 1 )下標法,如a[i]形式;( 2 )指針法,如* ( a i )或* ( p i )。其中a是數組名,p…

Guava LoadingCache

LoadingCache 是 Google Guava 庫提供的一個高級緩存實現,它通過自動加載機制簡化了緩存使用模式。核心特性自動加載機制當緩存未命中時,自動調用指定的 CacheLoader 加載數據線程安全:并發請求下,相同key只會加載一次靈活的過期策…

基于LSTM-GRU模型的黃金價格動態監測:關稅政策與美指的量化關聯研究

摘要:本文通過BERT-Large模型對關稅政策進行語義解析,結合LSTM-GRU混合模型、DCC-GARCH動態相關性模型及蒙特卡洛情景分析,量化解析7月11日黃金價格異動背后的三大驅動因子——政策沖擊、美元指數壓制與美聯儲政策不確定性,提供AI…

V少JS基礎班之第七彈

文章目錄一、 前言二、本節涉及知識點三、重點內容1、prototype2、constructor3、中場回顧&總結4、__ proto__5、第二次中場回顧&總結6、原型鏈6、第三次中場回顧&總結7、原型鏈中的奇點一、 前言 第七彈內容是原型鏈。網絡上原型鏈的資料很多。但是我看了很多篇&…

Nuxt3自動打包及自動修改端口號腳本

Nuxt3自動打包及自動修改端口號腳本技術文章大綱 背景與需求 Nuxt3作為現代Vue框架,開發中常需處理打包部署和端口配置問題。自動化腳本可提升效率,減少手動操作錯誤。 實現自動打包 利用Nuxt3內置命令結合Node.js腳本實現自動化構建。通過npm run build…

紅海云國資案例之多層級工貿集團的一體化HR平臺建設實戰

在中國經濟邁向高質量發展的進程中,國有企業作為重要的經濟支柱和行業引領者,正面臨著數字化轉型的深刻變革。F集團作為G市首家實現工貿一體化運營的大型企業,位列中國輕工業百強,其在人力資源數字化轉型中的探索和實踐&#xff0…

TCP詳解——流量控制、滑動窗口

目錄 流量控制 滑動窗口 丟包重傳 情況一:數據到達,應答丟失 情況二:數據包丟失 流量控制 TCP協議會根據接收端的緩沖區大小來調整發送速度,剩余空間多則發送速度快,否則降低發送速度 接收端將??可以接收的緩…