【QT】QT中的文件IO

QT中的文件IO

  • 一、有關文件IO的類
  • 二、步驟
    • 1、定義QFile的對象,與要讀寫的文件綁定在一起
    • 2、打開文件
    • 3、讀寫文件
      • 1)讀取文件
      • 2)寫入文件
    • 4、關閉文件
    • 5、示例代碼:
  • 三、QString和QByteArray之間的轉換
    • 1、方法
    • 2、示例代碼:
  • 四、QFileInfo類 --》獲取文件屬性
    • 1、方法
  • 五、QDir類 --》QT中的目錄操作
    • 1、方法
    • 2、示例代碼(與QFileInfo配合使用)

一、有關文件IO的類

QFile 表示某個文件對象
QDir 表示某個目錄對象
QFileInfo 存放文件的屬性信息(文件大小,文件類型等等)

二、步驟

1、定義QFile的對象,與要讀寫的文件綁定在一起

QFile::QFile(const QString &name)
參數:name --》需要讀寫的文件路徑名

2、打開文件

bool QIODevice::open(OpenMode mode)返回值:成功 true  失敗 false參數:QIODevice::ReadOnly    //只讀QIODevice::WriteOnly   //只寫QIODevice::ReadWrite   //只讀寫
新建文件  open(QIODevice::WriteOnly|QIODevice::Truncate)

3、讀寫文件

1)讀取文件

qint64 QIODevice::read(char *data, qint64 maxSize)返回值:成功 返回讀取的字節數  失敗 -1參數:data --》保存讀取的數據maxSize --》讀取多少字節的數據QByteArray QIODevice::read(qint64 maxSize)返回值:讀取的數據參數:maxSize --》讀取多少字節的數據
QByteArray QIODevice::readAll()  //一次性讀取整個文件內容,適合讀取小文件
qint64 QIODevice::readLine(char *data, qint64 maxSize) //一次最多讀取一行文件數據
類比:fgets

2)寫入文件

qint64 QIODevice::write(const char *data, qint64 maxSize)
qint64 QIODevice::write(const QByteArray &byteArray)

4、關閉文件

void QIODevice::close()

5、示例代碼:

// mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void on_pushButton_clicked();private:Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H// mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
#include <QDebug>
#include <QMessageBox>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);
//    ui->textBrowser->setText("你好,世界aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
}MainWindow::~MainWindow()
{delete ui;
}// pushbutton 右鍵轉到槽
void MainWindow::on_pushButton_clicked()
{QString pathName = QFileDialog::getOpenFileName(this);// 創建文件對象QFile myFile(pathName);// 打開文件bool ret = myFile.open(QIODevice::ReadWrite);if (!ret){QMessageBox::warning(this, "警告", "文件打開失敗");return;}// 讀取文件內容// char buf[100]={0};// myfile.read(buf,100); //讀取100個字節存放到buf中// qDebug()<<"讀取的內容: "<<buf;// QByteArray buf=myfile.read(100);  //讀取100個字節,以返回值的形式返回// QByteArray叫做字節數組,里面的內容是16進制的形式顯示// 把QByteArray轉換成QString  QString(const QByteArray &ba)// QString str(buf);// qDebug()<<"讀取的內容: "<<str;// 一次性讀取整個文件(視頻幾十M以上的無法讀取)QByteArray buf=myFile.readAll();//在文本瀏覽框中顯示ui->textBrowser->setText(buf);//關閉文件myFile.close();
}

三、QString和QByteArray之間的轉換

1、方法

QByteArray --》QString   自動轉換,調用了構造函數
QString --》QByteArray   必須使用函數轉換  QByteArray QString::toUtf8()
char * --》QString       自動轉換,調用了構造函數
QString --char *       調用QString中的data()方法

2、示例代碼:

// mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private:Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H// mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QByteArray>
#include <QString>
#include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 1、QByteArray --》QString   自動轉換(調用了構造函數)QByteArray byteArry("你好,世界");QString str1 = byteArry;  // 跟QString str1(byteArry)等價的qDebug()<<"str1:"<<str1;  // str1: "你好,世界"// 2、QString --》QByteArray   必須使用函數轉換  QByteArray QString::toUtf8()QString str2="helloworld";QByteArray array2=str2.toUtf8();qDebug()<<"array2:"<<array2;  // array2: "helloworld"// 3、char * --》QString       自動轉換(調用了構造函數)char buf[10]="你好";QString str3=buf;  //跟QString str3(buf)等價的qDebug()<<"str3:"<<str3;  // str3: "你好"// 4、QString --》char *       調用QString中的data()方法QString str4="nihao";QChar *p=str4.data();qDebug() << "通過循環逐個輸出字符:";for (int i = 0; p[i] != '\0'; ++i){qDebug() << p[i];}
}MainWindow::~MainWindow()
{delete ui;
}

四、QFileInfo類 --》獲取文件屬性

1、方法

QFileInfo::QFileInfo(const QString &file)參數:file --》文件的路徑名
QString QFileInfo::filePath() const  //獲取文件的路徑名
bool QFileInfo::isDir() const        //判斷文件是否是目錄
qint64 QFileInfo::size() const       //獲取文件大小
QString QFileInfo::suffix() const    //獲取文件的后綴名

五、QDir類 --》QT中的目錄操作

1、方法

第一步:新建QDir的對象,跟某個目錄的路徑綁定一起
QDir::QDir(const QString &path = QString())參數:path --》要遍歷的目錄的路徑名
第二步:遍歷目錄,得到目錄的文件名
QStringList QDir::entryList() const返回值:字符串列表中存放了目錄中所有的文件名字

2、示例代碼(與QFileInfo配合使用)

// mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void on_pushButton_clicked();private:Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H// mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
#include <QDir>
#include <QDebug>
#include <QFileInfo>
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}// 打開目錄
void MainWindow::on_pushButton_clicked()
{// 打開目錄對話框QString dirpath=QFileDialog::getExistingDirectory(this,"我的目錄");//qDebug()<<"選擇的目錄是: "<<dirpath;// 創建QDir的對象表示某個目錄QDir mydir(dirpath);// 遍歷目錄QStringList filelist=mydir.entryList();for(auto x:filelist)qDebug()<<"選擇的目錄中包含了: "<<x;// 獲取文件的屬性QFileInfo info("C:/Users/Administrator/Desktop/vm_share/筆記/1.txt");// 獲取文件大小qDebug()<<"文件大小是: "<<info.size();qDebug()<<"文件后綴名是: "<<info.suffix();}

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

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

相關文章

Nginx 499 錯誤的原因及解決方法

Nginx 499 錯誤的原因及解決方法 原因 客戶端超時&#xff1a; 客戶端在等待服務器響應時超時&#xff0c;導致連接被關閉。 解決方法&#xff1a;優化服務端響應時間&#xff0c;或調大客戶端的連接超時時間。 服務端響應過慢&#xff1a; 后端服務處理請求時間過長。 解決方法…

Smith-Waterman 算法(C++實現)

本文實現Smith-Waterman 算法案例&#xff0c;用于局部序列比對。該算法是生物信息學中用于尋找兩個 DNA、RNA 或蛋白質序列之間最優局部比對的經典算法&#xff0c;廣泛應用于序列相似性分析和功能預測。 問題描述 給定兩個生物序列 seq1 和 seq2&#xff0c;如何找到它們的最…

安卓玩機工具-----安卓機型通用 無損備份與恢復數據的工具BackupToolkit 操作過程

常規安卓機型數據備份與恢復的方法及工具 安卓設備的數據備份與恢復是保護個人數據的重要手段之一。以下是幾種常用的方法和工具&#xff1a; 方法一&#xff1a;利用內置的云服務進行備份 許多安卓設備提供了內置的云服務&#xff0c;例如華為手機可以通過“華為云空間”來…

oracle 動態性能視圖

Oracle 數據庫中的 V$SQLAREA 是一個動態性能視圖&#xff08;Dynamic Performance View&#xff09;&#xff0c;用于記錄共享池&#xff08;Shared Pool&#xff09;中所有 SQL 語句的統計信息。每個 SQL 語句在共享池中存儲為一個游標&#xff08;Cursor&#xff09;&#x…

OceanBase V4.3.5 上線全文索引功能,讓數據檢索更高效

近日&#xff0c;OceanBase 4.3.5 BP1 版本正式推出了企業級全文索引功能。該版本在中文分詞、查詢效率及混合檢索能力上進行了全面提升。經過自然語言模式和布爾模式在不同場景下的對比測試&#xff0c;OceanBase 的全文索引性能明顯優于 MySQL。 點擊下載 OceanBase 社區版…

海康攝像頭AI報警、移動偵測報警等通過Ehome/ISUP協議上報到LiveNVR流媒體平臺時如何進行報警配置

海康攝像頭AI報警、移動偵測報警等通過Ehome/ISUP協議上報到LiveNVR流媒體平臺時如何進行報警配置 1、LiveNVR介紹2、如何配置海康攝像頭、錄像機通過Ehome/ISUP注冊到LiveNVR設備 EHOME 接入配置示例設備 ISUP 接入配置示例直播流接入類型 海康ISUP海康 ISUP 設備ID啟用保存 3…

golang gmp模型分析

思維導圖&#xff1a; 1. 發展過程 思維導圖&#xff1a; 在單機時代是沒有多線程、多進程、協程這些概念的。早期的操作系統都是順序執行 單進程的缺點有&#xff1a; 單一執行流程、計算機只能一個任務一個任務進行處理進程阻塞所帶來的CPU時間的浪費 處于對CPU資源的利用&…

Redis基礎指令(Windows)

1.cmd命令行啟動redis 直接cmd打開整個文件 1.1.啟動server 輸入指令&#xff1a; redis-server.exe redis.windows.conf 會進入serve端 1.2.啟動客戶端 &#xff01;&#xff01;重新打開一個cmd&#xff0c;方法和上面一樣&#xff01;&#xff01; 之后輸入 redis-…

vue:前端預覽 / chrome瀏覽器設置 / <iframe> 方法預覽 doc、pdf / vue-pdf 預覽pdf

一、本文目標 <iframe> 方法預覽 pdf 、word vue-pdf 預覽pdf 二、<iframe> 方法 2.1、iframe 方法預覽需要 瀏覽器 設置為&#xff1a; chrome&#xff1a;設置-隱私設置和安全性-網站設置-更多內容設置-PDF文檔 瀏覽器訪問&#xff1a; chrome://settings/co…

【C++游戲引擎開發】第11篇:GLFW、GLAD環境搭建與第一個三角形渲染

一、GLFW、GLAD安裝 1.1 vcpkg安裝相關庫 跨平臺C++包管理利器vcpkg完全指南 # 安裝GLFW vcpkg install glfw3# 安裝GLAD vcpkg install glad1.2 初始測試代碼 #include <glad/glad.h> #include <GLFW/glfw3.h> int main() {glfwInit();GLFWwindow* window = g…

西門子S7-1500與S7-200SMART通訊全攻略:從基礎配置到遠程IO集成

以下是一篇關于西門子S7-1500與S7-200SMART通訊的詳細教程&#xff0c;包含遠程IO模塊的配置方法&#xff0c;適用于工業自動化場景的博客發布&#xff1a; 西門子S7-1500與S7-200SMART通訊全攻略&#xff1a;從基礎配置到遠程IO集成 一、硬件與軟件準備 硬件設備 主站&#x…

前端性能優化的全方位方案【待進一步結合項目】

以下是前端性能優化的全方位方案,結合代碼配置和最佳實踐,涵蓋從代碼編寫到部署的全流程優化: 一、代碼層面優化 1. HTML結構優化 <!-- 語義化標簽減少嵌套 --> <header><nav>...</nav> </header> <main><article>...</arti…

前端快速入門——JavaScript變量、控制語句

1.JavaScript 定義 JavaScript 簡稱 JS. JavaScript 是一種輕量級、解釋型、面向對象的腳本語言。它主要被設計用于在網頁上實現動態效果&#xff0c;增加用戶與網頁的交互性。 作為一種客戶端腳本語言&#xff0c;JavaScript 可以直接嵌入 HTML&#xff0c;并在瀏覽器中執行。…

GitHub 趨勢日報 (2025年04月01日)

GitHub 趨勢日報 (2025年04月01日) 本日報由 TrendForge 系統生成 https://trendforge.devlive.org/ &#x1f4c8; 今日整體趨勢 Top 10 排名項目名稱項目描述今日獲星語言1punkpeye/awesome-mcp-serversA collection of MCP servers.? 3280未指定2th-ch/youtube-musicYouTu…

windows手動添加鼠標右鍵彈窗快捷方式

此處以添加Git Bash Here為例 一.操作步驟 按 Win R 鍵打開 運行 對話框&#xff0c;輸入 regedit&#xff0c;并按下回車&#xff0c;打開注冊表編輯器。 導航到 HKEY_CLASSES_ROOT\Directory\Background\shell。 右鍵單擊 shell&#xff0c;選擇 新建 → 項&#xff0c;并…

2025.04.09【Sankey】| 生信數據流可視化精講

文章目錄 引言Sankey圖簡介R語言中的Sankey圖實現安裝和加載networkD3包創建Sankey圖的數據結構創建Sankey圖繪制Sankey圖 結論 引言 在生物信息學領域&#xff0c;數據可視化是理解和分析復雜數據集的關鍵工具之一。今天&#xff0c;我們將深入探討一種特別適用于展示數據流動…

GD32H759IMT6 Cortex-M7 OpenHarmony輕量系統移植——4.1版本升級到5.0.3

筆者在去年利用國慶時間&#xff0c;將Cortex-M7 的國產廠商兆易創新GD32H459移植OpenHarmony輕量系統&#xff0c;但是適配不太完善——只能選擇liteos-m接管中斷。這樣導致使用中斷非常麻煩。于是筆者最近將接管中斷模式修改為不接管&#xff0c;這樣可以方便的使用gd32提供的…

【算法競賽】樹上最長公共路徑前綴(藍橋杯2024真題·團建·超詳細解析)

目錄 一、題目 二、思路 1. 問題轉化&#xff1a;同步DFS走樹 2. 優化&#xff1a;同步DFS匹配 3. 狀態設計&#xff1a;dfs參數含義 4. 匹配過程&#xff1a;用 map 建立權值索引 5. 終止條件&#xff1a;無法匹配則更新答案 6. 總結 三、完整代碼 四、知識點總…

開源免費虛擬化平臺PVE軟件定義網絡

一、PVE SDN&#xff08;Software Defined Networking&#xff09;原理與使用邏輯 SDN&#xff08;軟件定義網絡&#xff09; 是一種將網絡控制邏輯從傳統交換機、路由器中分離出來的技術&#xff0c;使得網絡可以通過軟件集中管理和自動化配置。 Proxmox VE&#xff08;PVE&…

mysql 8.0.41下載安裝教程(附安裝包)mysql 8.0.41圖文詳細安裝教程

文章目錄 前言一、mysql 8.0.41 簡介二、安裝前準備三、MySQL 8.0 安裝流程解析1.解壓安裝包2.啟動安裝程序3.選擇安裝類型4.選擇安裝組件5.開始安裝6.配置設置&#xff08;部分步驟&#xff09;7.設置數據庫密碼8.完成安裝配置9.配置環境變量&#xff1a;10.驗證安裝&#xff…