Qt文件讀寫

Qt文件讀寫(Stream流形式)

文件讀寫相關類

1. QFile類

QFile主要用于文件的打開、關閉等功能;

[override virtual] bool QFile::open(QIODevice::OpenMode mode);

Reimplements: QIODevice::open(QIODevice::OpenMode mode).
Opens the file using OpenMode mode, returning true if successful; otherwise false.
The mode must be QIODevice::ReadOnly, QIODevice::WriteOnly, or QIODevice::ReadWrite. It may also have additional flags, such as QIODevice::Text and QIODevice::Unbuffered.
重新實現:QIODevice::open(QIODevice::OpenMode模式)。
使用OpenMode模式打開文件,如果成功則返回true,否則錯誤。
模式必須為QIODevice::ReadOnly、QIODevice::WriteOnly或QIODevice::ReadWrite。它也可能有額外的標志,如QIODevice::Text和QIODevice::Unbuffered。

[virtual] void QIODevice::close();

First emits aboutToClose(), then closes the device and sets its OpenMode to NotOpen. The error string is also reset.
首先發出aboutToClose(),然后關閉設備并將其OpenMode設置為NotOpen。錯誤字符串也會被重置。

2. QTextStream類

讀取一行

bool QTextStream::readLineInto(QString *line, qint64 maxlen = 0);

Reads one line of text from the stream into line. If line is 0, the read line is not stored.
The maximum allowed line length is set to maxlen. If the stream contains lines longer than this, then the lines will be split after maxlen characters and returned in parts.
If maxlen is 0, the lines can be of any length.
The resulting line has no trailing end-of-line characters (“\n” or “\r\n”), so calling QString::trimmed() can be unnecessary.
If line has sufficient capacity for the data that is about to be read, this function may not need to allocate new memory. Because of this, it can be faster than readLine().
Returns false if the stream has read to the end of the file or an error has occurred; otherwise returns true. The contents in line before the call are discarded in any case.
將一行文本從流讀入行。如果line為0,則不存儲讀行。
允許的最大線路長度設置為maxlen。如果流包含超過這個長度的行,那么這些行將在maxlen字符之后分割并以部分形式返回。
如果maxlen為0,則行可以是任意長度。
結果行沒有尾隨的行尾字符(“\n”或“\r\n”),因此調用QString::trim()可能是不必要的。
如果行有足夠的容量來存儲即將讀取的數據,則該函數可能不需要分配新的內存。正因為如此,它可以比readLine()更快。
如果流已讀取到文件的末尾或發生錯誤,則返回false;否則返回true。在任何情況下,調用之前行的內容都將被丟棄。

寫入

QTextStream &QTextStream::operator<<(XXX xxx);

文件讀取示例

先寫入數據到一個csv文件,再讀取csv文件的內容

#include <QCoreApplication>
#include <QFile>
#include <QTextStream>
#include <QDebug>struct TimeValue
{double m_dTime;double m_dValue;TimeValue(double dTime = 0.0, double dValue = 0.0) : m_dTime(dTime), m_dValue(dValue){// ...}
};// 寫入函數
void WriteFile()
{QFile file(QString(QCoreApplication::applicationDirPath() + "/data.csv"));if (!file.open(QIODevice::WriteOnly))qDebug() << "Write Open file failed!";QTextStream textStream(&file);textStream << "time, value\n";for (int i = 0; i != 10; ++i)textStream << QString::number(i) << "," << QString::number(i * 100) << "\n";file.close();
}// 讀取函數
void ReadFile()
{QFile file(QString(QCoreApplication::applicationDirPath() + "/data.csv"));if (!file.open(QIODevice::ReadOnly | QIODevice::Text))qDebug() << "Read Open file failed!";QTextStream textStream(&file);QString strLine;textStream.readLineInto(&strLine);QVector<TimeValue> vecTimeValue;// 讀取一行的字符串數據while (textStream.readLineInto(&strLine)){TimeValue timeValue;QStringList strList = strLine.split(",");timeValue.m_dTime = strList[0].toDouble();timeValue.m_dValue = strList[1].toDouble();vecTimeValue.push_back(timeValue);}file.close();
}int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);WriteFile();ReadFile();return a.exec();
}

文件數據樣式:
在這里插入圖片描述

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

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

相關文章

[特殊字符]【高并發實戰】Java Socket + 線程池實現高性能文件上傳服務器(附完整源碼)[特殊字符]

大家好&#xff01;今天給大家分享一個 Java Socket 線程池 實現的高性能文件上傳服務器&#xff0c;支持 多客戶端并發上傳&#xff0c;代碼可直接運行&#xff0c;適合 面試、項目實戰、性能優化 學習&#xff01; &#x1f4cc; 本文亮點&#xff1a; ? 完整可運行代碼&a…

Python proteinflow 庫介紹

ProteinFlow是一個開源的Python庫,旨在簡化蛋白質結構數據在深度學習應用中的預處理過程。以下是其詳細介紹: 功能 數據處理:支持處理單鏈和多鏈蛋白質結構,包括二級結構特征、扭轉角等特征化選項。 數據獲取:能夠從Protein Data Bank (PDB)和Structural Antibody Databa…

WebPages 對象

WebPages 對象 引言 在Web開發領域&#xff0c;WebPages 對象是前端工程師和開發者常用的工具之一。它提供了豐富的API&#xff0c;使我們能夠輕松地與網頁元素進行交互。本文將深入探討WebPages對象的概念、特性以及在實際開發中的應用。 概念 WebPages對象是現代瀏覽器提…

Mysql表的操作(2)

1.去重 select distinct 列名 from 表名 2.查詢時排序 select 列名 from 表名 order by 列名 asc/desc; 不影響數據庫里面的數據 錯誤樣例 &#xff1a; 但結果卻有點出乎意料了~為什么會失敗呢&#xff1f; 其實這是因為書寫的形式不對&#xff0c;如果帶了引號&#xff0c;…

先占個日常,等會寫。

引入一個重要的概念 “struct” &#xff08;譯為中文&#xff1a;結構體&#xff09; 可用作設出比較復雜的一些變量類型 語法 &#xff1a;struct point name { int x; int y; int z;} point 和 name是任意命名的名字&#xff0c;含義是&#xff0c;聲明一個變量類型為st…

SmolDocling:一種超緊湊的視覺語言模型,用于端到端多模態文檔轉換

paper地址:SmolDocling: An ultra-compact vision-language model for end-to-end multi-modal document conversion Huggingface地址:SmolDocling-256M-preview 代碼對應的權重文件:SmolDocling-256M-preview權重文件 一、摘要 以下是文章摘要的總結: SmolDocling 是一…

MySQL SQL Mode

SQL Mode 是 MySQL 中一個重要的系統變量&#xff0c;它決定了 MySQL 應遵循的 SQL 語法規則和數據驗證規則。 什么是 SQL Mode SQL Mode 定義了 MySQL 應該支持的 SQL 語法以及執行數據驗證的方式。通過設置不同的 SQL Mode&#xff0c;可以讓 MySQL 在不同程度上兼容其他數據…

Java bs架構/反射

bs架構 規定的格式是要換行&#xff0c;而打印流天然換行 線程池可以直接處理thread&#xff0c;thread繼承自runnable 在Java中&#xff0c;線程池的pool.execute()方法用于提交一個任務給線程池執行。這個方法接受一個Runnable對象作為參數。Runnable是一個函數式接口&…

C++手撕單鏈表及逆序打印

在學習數據結構的過程中&#xff0c;鏈表是一個非常重要的基礎數據結構。今天&#xff0c;我們將通過C手動實現一個單鏈表&#xff0c;并添加一個逆序打印的功能&#xff0c;幫助大家更好地理解鏈表的實現和操作。 一、鏈表簡介 鏈表是一種線性數據結構&#xff0c;其中每個元…

netty中的ChannelPipeline詳解

Netty中的ChannelPipeline是事件處理鏈的核心組件,負責將多個ChannelHandler組織成有序的責任鏈,實現網絡事件(如數據讀寫、連接狀態變化)的動態編排和傳播。以下從核心機制、執行邏輯到應用場景進行詳細解析: 1. 核心結構與組成 雙向鏈表結構 組成單元:ChannelPipeline…

智能物聯網網關策略部署

實訓背景 某智慧工廠需部署物聯網網關&#xff0c;實現以下工業級安全管控需求&#xff1a; 設備準入控制&#xff1a;僅允許注冊MAC地址的傳感器接入&#xff08;白名單&#xff1a;AA:BB:CC:DD:EE:FF&#xff09;。協議合規性&#xff1a;禁止非Modbus TCP&#xff08;端口…

前端-vue2核心

官網網址Vue2 安裝 — Vue.js 搭建環境 第一種方式&#xff08;剛開是接觸Vue&#xff09; 我們看官網&#xff0c;可以直接在script引入vue版本。這里有兩個版本&#xff0c;開發版和生產版本。我們兩個都下載。 然后創建一個項目&#xff0c;將下載的生產版本和開發版本粘…

【BUG】遠程連接阿里云服務器上的redis報錯

出現 Redis Client On Error: Error: connect ECONNREFUSED 47.100.XXX.XX:6379 錯誤&#xff0c;表明 Redis 客戶端無法連接到指定的 Redis 服務器&#xff0c;可按以下步驟排查解決&#xff1a; 1. 檢查 Redis 服務器是否運行 操作&#xff1a;在 Redis 服務器所在終端執行…

mongodb--用戶管理

文章目錄 MongoDB 用戶管理1. 連接到 MongoDB2. 用戶創建2.1 創建管理員用戶2.2 創建特定數據庫用戶2.3 常用內置角色 3. 用戶管理操作3.1 查看所有用戶3.2 查看特定用戶信息3.3 更新用戶密碼3.4 添加用戶角色3.5 移除用戶角色3.6 刪除用戶 4. 權限修改4.1 創建自定義角色4.2 將…

DeepSeek與搜索引擎:AI生成內容如何突破“語義天花板”

一、搜索引擎的“內容饑餓癥”與AI的“產能悖論” 2024年&#xff0c;全球每天新增470萬篇網絡文章&#xff0c;但搜索引擎的索引拒絕率高達68%。這一矛盾的根源在于&#xff1a;算法對“高質量原創”的定義已從“形式獨特性”轉向“認知增值性”。傳統AI生成內容&#xff08;…

YOLO目標檢測應用——基于 YOLOv8目標檢測和 SAM 零樣本分割實現指定目標分割

概述 在當前的計算機視覺領域&#xff0c;目標分割技術正變得越來越重要。市面上有許多分割模型&#xff0c;它們的工作原理大致相似&#xff0c;通常包括收集數據、配置模型以及訓練分割模型等步驟。最終目標是實現精確的目標分割。而隨著 SAM&#xff08;Segment Anything M…

在Flutter中使用BottomNavigationBar和IndexedStack可以實現一個功能完整的底部導航欄

在Flutter中&#xff0c;使用BottomNavigationBar和IndexedStack可以實現一個功能完整的底部導航欄。BottomNavigationBar用于顯示底部的導航按鈕&#xff0c;而IndexedStack則用于管理頁面的切換&#xff0c;確保每個頁面的狀態得以保留&#xff08;即頁面不會因為切換而重新構…

【10】數據結構的矩陣與廣義表篇章

目錄標題 二維以上矩陣矩陣存儲方式行序優先存儲列序優先存儲 特殊矩陣對稱矩陣稀疏矩陣三元組方式存儲稀疏矩陣的實現三元組初始化稀疏矩陣的初始化稀疏矩陣的創建展示當前稀疏矩陣稀疏矩陣的轉置 三元組稀疏矩陣的調試與總代碼十字鏈表方式存儲稀疏矩陣的實現十字鏈表數據標簽…

微服務篇——SpringCloud

服務注冊 Spring Cloud5大組件有哪些&#xff1f; 服務注冊和發現是什么意思&#xff1f;Spring Cloud如何實現服務注冊發現&#xff1f; nacos與eureka的區別 負載均衡 如何實現負載均衡&#xff1f; Ribbon負載均衡的策略有哪些&#xff1f; 如何自定義負載均衡的策略&…

【小沐雜貨鋪】基于Three.JS繪制三維數字地球Earth(GIS 、WebGL、vue、react,提供全部源代碼)

&#x1f37a;三維數字地球系列相關文章如下&#x1f37a;&#xff1a;1【小沐學GIS】基于C繪制三維數字地球Earth&#xff08;456:OpenGL、glfw、glut&#xff09;第一期2【小沐學GIS】基于C繪制三維數字地球Earth&#xff08;456:OpenGL、glfw、glut&#xff09;第二期3【小沐…