【qt】文件類(QFile)

很高興你能看到這篇文章,同時我的語雀文檔也更新了許多嵌入式系列的學習筆記希望能幫到你 :
https://www.yuque.com/alive-m4b9n

目錄

  • QFile 主要功能
  • QFile 操作步驟
  • QFile 其他常用函數
  • 案例分析及實現
    • 功能一實現:打開文件并顯示
    • 功能二實現:另存為

QFile 是 Qt 提供的一個用于文件操作的類,繼承自 QIODevice ,用于處理文件的讀取、寫入、刪除等操作。

使用前需要引入頭文件

QFile 主要功能

  • 打開文件
  • 讀取數據
  • 寫入數據
  • 刪除文件
  • 檢查文件狀態
  • 復制和重命名文件

QFile 支持文本和二進制模式,可以用 QTextStreamQDataStream 進行高效的文件操作。

QFile 操作步驟

1?? 創建 QFile 對象

//構造函數
QFile(const QString &name, QObject *parent)
QFile(QObject *parent)
QFile(const QString &name)---------示例--------------
QFile file("test.txt");

2?? 調用 open() 以指定模式打開文件

 bool open(FILE *fh, QIODevice::OpenMode mode,  //通過文件路徑打開QFileDevice::FileHandleFlags handleFlags = DontCloseHandle)bool open(int fd, QIODevice::OpenMode mode, 	//通過fd文件描述符打開QFileDevice::FileHandleFlags handleFlags = DontCloseHandle)------------------示例-----------------
QFile file("test.txt");
file.open(QIODevice::ReadWrite | QIODevice::Text);

打開模式如下,需要多個模式時用 |隔開

模式描述
ReadOnly只讀模式
WriteOnly只寫模式
ReadWrite讀寫模式
Append追加模式(不會覆蓋已有內容)
Text以文本模式打開(自動轉換換行符)
Truncate清空文件內容

3?? 文件操作:讀或者寫

//讀
QByteArray QIODevice::read(qint64 maxSize) //讀取最大maxsize的數據
QByteArray QIODevice::readAll()  //讀取文件所有數據,返回QByteArray數組
//寫
qint64 write(const QByteArray &byteArray) //QByteArray 數據
qint64 write(const char *data, qint64 maxSize)  //char* 指針,數據大小----------示例-----------
QFile file("example.txt");
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {QByteArray content = file.readAll();qDebug() << "文件內容:\n" << content;file.close();
}

4?? 關閉

void QFileDevice::close()

QFile 其他常用函數

類別函數作用示例代碼
文件基本操作exists()判斷文件是否存在if (file.exists()) qDebug() << "文件存在"
remove()刪除文件file.remove();
copy(src, dst)復制文件QFile::copy("test.txt", "backup.txt");
rename(old, new)重命名/移動文件file.rename("new_name.txt");
flush()刷新緩沖區file.flush();
文件信息size()獲取文件大小(字節)qDebug() << file.size();
fileName()獲取文件名(可能是相對路徑)qDebug() << file.fileName();
absoluteFilePath()獲取文件的絕對路徑qDebug() << QFileInfo(file).absoluteFilePath();
permissions()獲取文件權限qDebug() << file.permissions();
setPermissions()修改文件權限file.setPermissions(QFileDevice::ReadOwner)
讀寫文件isReadable()是否可讀if (file.isReadable()) qDebug() << "可讀";
isWritable()是否可寫if (file.isWritable()) qDebug() << "可寫";
文件狀態isOpen()判斷文件是否已打開if (file.isOpen()) qDebug() << "文件已打開";
isWritable()判斷文件是否可寫if (file.isWritable()) qDebug() << "文件可寫";
handle()獲取底層文件句柄int fd = file.handle();

案例分析及實現

需求

  • 打開文件對話框,獲取文件路徑名,然后通過文件操作將文件內容顯示到輸入框上
  • 點擊另存為按鈕可以保存當前文件到其他地方去。

功能一實現:打開文件并顯示

思路

1?? 打開文件選擇對話框QFileDialog::getOpenFileName

2?? 獲取用戶選擇的文件路徑

3?? 使用 QFile 讀取文件內容 4?? 將內容顯示到 QTextEdit

mainwindow.h

private slots:
void on_openButton_clicked();  // 打開文件
void on_saveAsButton_clicked(); // 另存為private:
Ui::MainWindow *ui;
QString currentFilePath;  // 存儲當前文件路徑

mainwindow.cpp

//打開文件
void MainWindow::on_openButton_clicked()
{//打開文件對話框,獲取文件路徑QString filePath = QFileDialog::getOpenFileName(this,"選擇文件","","文本文件(*.txt);;所有文件(*.*)");if(filePath.isEmpty()){qDebug()<<"未選擇文件";return;}qDebug() << "選擇的文件路徑:" << filePath;currentFilePath = filePath; //記錄當前的文件路徑//打開文件QFile file(filePath);if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){qDebug()<<"文件打開失敗"<<file.errorString();//輸出錯誤信息return;}//讀取文件內容QTextStream in(&file);QString fileContent = in.readAll();file.close();//顯示到QtextEdit上ui->textEdit->setText(fileContent);
}

效果

功能二實現:另存為

mainwindow.cpp

// 另存為
void MainWindow::on_saveAsButton_clicked()
{// 打開文件對話框,獲取保存路徑QString saveFilePath = QFileDialog::getSaveFileName(this, "另存為", "","文本文件 (*.txt);;所有文件 (*.*)");if (saveFilePath.isEmpty()) {qDebug() << "未選擇保存路徑";return;}qDebug() << "保存文件路徑:" << saveFilePath;// 打開文件QFile file(saveFilePath);if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {qDebug() << "文件保存失敗:" << file.errorString();return;}// 獲取 QTextEdit 中的內容QString content = ui->textEdit->toPlainText();// 寫入文件QTextStream out(&file);out << content;file.close();qDebug() << "文件保存成功";
}

效果

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

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

相關文章

基于AT89C52單片機的輪胎壓力監測系統

點擊鏈接獲取Keil源碼與Project Backups仿真圖&#xff1a; https://download.csdn.net/download/qq_64505944/90545655?spm1001.2014.3001.5503 功能介紹&#xff1a; 采用MPX4115壓力傳感器進行輪胎壓力檢測&#xff1b;使用LCD液晶顯示器顯示輪胎壓力&#xff1b;若壓力過…

shell腳本--MySQL簡單調用

實現功能 增 數據庫的創建&#xff0c;數據表的創建已經實現 創建用戶 刪 刪除數據庫&#xff0c; 刪除庫下的某個表&#xff0c; 刪除某個用戶 改 暫無 查 查看所有的數據庫&#xff0c; 查看某個庫下的所有數據表&#xff0c; 查看某個表的結構&#xff0c; 查…

計算機網絡 OSI參考模型

目錄 OSS七層 OSI通信過程1 OSI通信過程2 應用層 表示層 會話層 傳輸層 網絡層 數據鏈路層 物理層 OSS七層 OSI通信過程1 OSI通信過程2 應用層 表示層 會話層 傳輸層 網絡層 數據鏈路層 物理層

2025年華為HCIP題庫分享

1101、 【拖拽題】OPSF鄰接關系建立的過程中需要使用不同的報文&#xff0c;那么請分別將以下各個狀態和該狀態使用的報文聯系起來。 答題格式為&#xff1a;11 22 33 43 正確答案&#xff1a;【12】【21】【24】【33】 解析&#xff1a; 建立鄰居關系 RouterA的一個連接到廣…

DIskgenius使用說明

文章目錄 一、概述1. 軟件簡介2. 系統要求 二、核心功能1. 分區管理(1) 查看磁盤分區(2) 創建與刪除分區(3) 調整分區大小(4) 格式化分區 2. 數據恢復(1) 恢復已刪除文件(2) 恢復丟失分區(3) 恢復誤格式化分區 3. 磁盤復制(1) 克隆磁盤(2) 磁盤鏡像 4. 文件操作(1) 文件復制與移…

linux--------------進程控制(上)

1.進程創建 1.1fork函數初識 在linux中fork函數是?常重要的函數&#xff0c;它從已存在進程中創建?個新進程。新進程為?進程&#xff0c;?原進 程為?進程。 #include <unistd.h> pid_t fork(void); 返回值&#xff1a;?進程中返回0&#xff0c;?進程返回?進程id…

windows免密SSH連接 ubuntu教程

文章目錄 前情提要step1. 在windows下生成SSH密鑰step2. SSH公鑰copy到ubuntu的~/.ssh/authorized_keys內step3. 修改文件權限&#xff08;這一步完成后就可以實現免密SSH連接了&#xff09; 前情提要 ubuntu下安裝SSH服務 sudo apt-get install openssh-serverwindows下安裝…

中級:數組算法面試題全解析

一、引言 在Java面試中&#xff0c;數組相關的算法題是考察候選人基礎算法能力的常見類型。面試官通過這些問題了解候選人在面對具體問題時的邏輯思維和代碼實現能力。本文將深入剖析常見的數組算法面試題&#xff0c;結合實際開發場景&#xff0c;幫助讀者全面掌握這些知識點…

《Linux運維實戰:Ubuntu 22.04配置pam實現密碼復雜度策略》

總結&#xff1a;整理不易&#xff0c;如果對你有幫助&#xff0c;可否點贊關注一下&#xff1f; 更多詳細內容請參考&#xff1a;Linux運維實戰總結 一、背景信息 由于安全方面的考慮&#xff0c;先要求Ubuntu 22.04系統需配置密碼復雜度策略&#xff0c;先要求如下&#xff1…

JavaScript數據結構

目錄 JavaScript數據結構 一、基礎數據結構 1. 數組&#xff08;Array&#xff09; 2. 對象&#xff08;Object&#xff09; 二、ES6 高級數據結構 1. Map 2. Set 3. WeakMap 與 WeakSet 三、類型化數組&#xff08;Typed Arrays&#xff09; 四、其他數據結構實現 …

魔改chromium——基礎環境搭建

谷歌chromium環境要求詳細文檔 軟件和環境要求&#xff0c;必須安裝&#xff0c;硬性要求 系統環境&#xff1a;Windows 10&#xff0c;內存最小8GB&#xff0c;推薦16GB&#xff0c;NTFS格式磁盤最少100GB空間Git版本&#xff1a;安裝最新版本即可&#xff0c;Git桌面端下載…

電子文檔安全管理系統V6.0接口backup存在任意文件下載漏洞

免責聲明&#xff1a;本號提供的網絡安全信息僅供參考&#xff0c;不構成專業建議。作者不對任何由于使用本文信息而導致的直接或間接損害承擔責任。如涉及侵權&#xff0c;請及時與我聯系&#xff0c;我將盡快處理并刪除相關內容。 漏洞描述 電子文檔安全管理系統 V6.0 reso…

5.3 MVVM模型

一、MVVM的基本概念 MVVM的基本概念&#xff1a;Model、View、ViewModel 組件職責示例內容Model封裝業務數據User類&#xff0c;包含姓名、年齡屬性View負責UI呈現XAML界面&#xff0c;包含數據綁定ViewModel連接View和Model&#xff0c;處理視圖邏輯MainViewModel包含命令和…

python采集淘寶拍立淘按圖搜索API接口,json數據示例參考

以下是關于淘寶拍立淘按圖搜索API接口的詳細說明及JSON數據示例&#xff1a; 一、接口概述 淘寶拍立淘按圖搜索API接口是淘寶開放平臺提供的一項基于圖像識別技術的服務&#xff0c;允許開發者通過上傳商品圖片&#xff0c;獲取與圖片相似或相同的商品列表。該接口廣泛應用于…

每天學一個 Linux 命令(8):ls

大家好,歡迎來到《每天掌握一個Linux命令》系列。在這個系列中,我們將逐步學習并熟練掌握Linux命令,今天,我們要學習的命令是ls。 01 什么是ls命令 在Linux系統中,ls命令是“list”的縮寫,其英文全稱為“list directory contents”,即“列出目錄內容”。該命令非常實用…

00.【Linux系統編程】 Linux初識(云服務器設置CentOS并使用、Xshell鏈接云服務器)

目錄 一、華為云服務器免費體驗申請 二、Xshell遠程鏈接創建好的華為云服務器 2.1 下載Xshell 2.2 Xshell遠程連接華為云服務器 一、華為云服務器免費體驗申請 華為云官網 1. 進入華為云官網&#xff0c;最上面一欄點活動&#xff0c;并進入免費體驗中心。 2. 找到含有“…

arm非對齊訪問編譯器選項

gcc編譯選項&#xff1a; -munaligned-access gcc編譯選項&#xff1a; -mno-unaligned-access Enables (or disables) reading and writing of 16- and 32- bit values from addresses that are not 16- or 32- bit aligned. By default unaligned access is disabled for…

jmeter線程組高并發(詳細講解)

在 JMeter 中&#xff0c;線程組是測試計劃的核心組件&#xff0c;用于定義虛擬用戶&#xff08;線程&#xff09;的行為。線程組的屬性決定了測試的并發用戶數、加載速度、運行時間等。以下是線程組屬性的詳細講解&#xff1a; 1. 名稱&#xff08;Name&#xff09; 定義&…

vs2022中使用spdlog、C++日志

spdlog::set_level(spdlog::level::info); // 只顯示info及比info高級的信息&#xff0c;trace 和 debug 不顯示 參考&#xff1a;Windows10中使用VS2022和Cmake編譯構建C開源日志庫-spdlog-騰訊云開發者社區-騰訊云 spdlog C日志管理 | 快速上手教程 - 知乎 1.按照上述步驟…

SOME/IP-SD -- 協議英文原文講解10

前言 SOME/IP協議越來越多的用于汽車電子行業中&#xff0c;關于協議詳細完全的中文資料卻沒有&#xff0c;所以我將結合工作經驗并對照英文原版協議做一系列的文章。基本分三大塊&#xff1a; 1. SOME/IP協議講解 2. SOME/IP-SD協議講解 3. python/C舉例調試講解 5.1.5 Non…