QT五 文件系統,QFile,QfileInfo

?總覽

  1. QIODevice:所有 I/O 設備類的父類,提供了字節塊讀寫的通用操作以及基本接口;
  2. QFileDevice:Qt5新增加的類,提供了有關文件操作的通用實現。
  3. QFlie:訪問本地文件或者嵌入資源;
  4. QTemporaryFile:創建和訪問本地文件系統的臨時文件;
  5. QBuffer:讀寫QbyteArray, 內存文件;
  6. QProcess:運行外部程序,處理進程間通訊;
  7. QAbstractSocket:所有套接字類的父類;
  8. QTcpSocket:TCP協議網絡數據傳輸;
  9. QUdpSocket:傳輸 UDP 報文;
  10. QSslSocket:使用 SSL/TLS 傳輸數據;

文件系統分類:

? ? ? ? 1. 順序訪問設備:

是指它們的數據只能訪問一遍:從頭走到尾,從第一個字節開始訪問,直到最后一個字節,中途不能返回去讀取上一個字節,這其中,QProcess、QTcpSocket、QUdpSoctet和QSslSocket是順序訪問設備。

????????2. 隨機訪問設備:

可以訪問任意位置任意次數,還可以使用QIODevice::seek()函數來重新定位文件訪問位置指針,QFile、QTemporaryFile和QBuffer是隨機訪問設備,

核心?QFlie-基本文件操作

QFile提供了從文件中讀取和寫入數據的能力。

我們通常會將文件路徑作為參數傳給QFile的構造函數。不過也可以在創建好對象最后,使用setFileName()來修改

打開文件普通文件,關閉文件,讀取文件

讀取UTF-8格式的文件的三種方式

void MainWidget::on_openbutton_clicked()
{qDebug()<<"openclick";//通過dialogfile,讓user選擇一個txt文件。QFileDialog filedialog;QString openfilename = filedialog.getOpenFileName(this,"選擇你要打開的文件","../","Text files (*.txt);;XML files (*.xml)");//如果user沒有選擇,則返回nullif(nullptr==openfilename){qDebug()<<"openfilename = null";return;}else{qDebug()<<openfilename.toUtf8().data();}//走到這里說明該文件的存在的,使用文件名 構建一個QFileQFile file(openfilename);char data[1024] = {0};int readlen = 0;bool openok = file.open(QIODevice::ReadOnly);if(false == openok){qDebug()<<"file open error";}else{qDebug()<<"file open success";//方式一,QFile提供了 readAll()函數,一次性讀完//這里要讀取的是utf-8的文本文件,如果不是utf-8格式,則顯示的是亂碼
//        QByteArray bytearr = file.readAll();
//        ui->textEdit->setText(bytearr);//方式二 按照C++的語法寫。QFile read函數的返回值如下:如果讀取到的值是0,說明讀到文件末尾了,如果是-1說明有error發生,如果大于0,才是真的有數據
//        while((readlen = file.read(data,1024)) != 0){
//            if(readlen==-1){
//                ui->textEdit->setText("讀取文件發生問題\n");
//                break;
//            }else if(readlen > 0 ){
//                ui->textEdit->append(data);
//            }
//        }//方式三。QByteArray ba ;while(!file.atEnd()){
//            qDebug()<<file.readLine(); readline 函數的內部實現是讀完一行就繼續下一行,知道結束,我們這里如果這樣打log,那么再次調用readline就會讀取下一行ba.append(file.readLine());}ui->textEdit->setText(ba);}file.close();}

讀取其他文件格式的文件 -參見 QTextStream

存儲文件

void MainWidget::on_savebutton_clicked()
{qDebug()<<"saveclick";QFileDialog filedialog;QString savefilename = filedialog.getSaveFileName(this,"save","../","Text files (*.txt)");if(savefilename.isEmpty() == false){qDebug()<<"保存的文件名為" <<savefilename;QFile file(savefilename);bool saveok = file.open(QIODevice::WriteOnly);if(saveok ==false){qDebug()<<"打開文件失敗"<< file.fileName();return;} else {QString qs = this->ui->textEdit->toPlainText();file.write(qs.toUtf8());}file.close();}else{qDebug()<<"用戶取消了保存";return;}}

使用?QDataStream 打開二進制文件?

注意的是,我們保存的是二進制的文件,即使名字是.txt,使用txt也是打不開的。

void MainWidget::savedata(){QFile qfile("../resource/009qfile/savedata.txt");bool wirteok = qfile.open(QIODevice::WriteOnly);if(wirteok==false){qDebug()<<"文件不存在";return;}else{qDebug()<<"savedata.txt存在";QDataStream datastream(&qfile);datastream<<QString("中國")<< 123567;}qfile.close();}

打開二進制文件

void MainWidget::readdata(){QFile qfile("../resource/009qfile/savedata.txt");bool readok = qfile.open(QIODevice::ReadOnly);if(readok==false){qDebug()<<"讀取文件不存在";return;}else{qDebug()<<"讀取文件savedata.txt存在";QDataStream datastream(&qfile);QString wenzi;int a;datastream>>wenzi >> a;qDebug()<<wenzi;qDebug()<<wenzi.toUtf8().data();qDebug()<<a;}qfile.close();
}

使用?QTextStream使用指定編碼

這里要注意的是:你存儲的時候用的什么編碼,讀取的時候也要用什么編碼。

如果我們打開的文件不知道是什么編碼,那是無法打開的。

void MainWidget::saveTextStream(){QFile qfile("../resource/009qfile/saveTextStream.txt");bool wirteok = qfile.open(QIODevice::WriteOnly);if(wirteok==false){qDebug()<<"saveTextStream.xt文件不存在";return;}else{qDebug()<<"saveTextStream.txt存在";QTextStream textstream(&qfile);textstream.setCodec("UTF-16");textstream<<QString("中國人zhongguo")<< 123567;}qfile.close();
}void MainWidget::readTextStream(){qDebug()<<"openclick";//通過dialogfile,讓user選擇一個txt文件。QFileDialog filedialog;QString openfilename = filedialog.getOpenFileName(this,"選擇你要打開的文件","../","Text files (*.txt);;XML files (*.xml)");//如果user沒有選擇,則返回nullif(nullptr==openfilename){qDebug()<<"openfilename = null";return;}else{qDebug()<<openfilename.toUtf8().data();}//走到這里說明該文件的存在的,使用文件名 構建一個QFileQFile file(openfilename);bool openok = file.open(QIODevice::ReadOnly);if(false == openok){qDebug()<<"file open error";}else{//注意這里的讀取方式qDebug()<<"file open success";QTextStream textstream(&file);textstream.setCodec("UTF-16");ui->textEdit->setText(textstream.readAll());}file.close();}

QFileInfo

有關文件本身的信息,比如文件名、文件所在目錄的名字等,則是通過QFileInfo獲取

    //走到這里說明該文件的存在的,使用文件名 構建一個QFileQFile file(openfilename);//值得注意的是,有關文件本身的信息,比如文件名、文件所在目錄的名字等,則是通過 QFileInfo 獲取,而不是自己分析文件路徑字符串。QFileInfo info(file);qDebug() << "info.isDir()" << info.isDir();//info 是不是路徑qDebug() << "info.isSymLink()" << info.isSymLink();//如果此對象指向符號鏈接或快捷方式,則返回true;否則返回false。qDebug() << "info.isFile()" << info.isFile();// 是不是文件qDebug() << "info.isExecutable()" << info.isExecutable(); //是不是可執行文件,對于windows,指的應該就是exe文件qDebug() << "info.baseName()" << info.baseName(); //  QFileInfo fi("/tmp/archive.tar.gz"); QString base = fi.baseName();  // base = "archive"qDebug() << "info.completeBaseName() " << info.completeBaseName();//  QFileInfo fi("/tmp/archive.tar.gz"); QString base = fi.completeBaseName();  // base = "archive.tar"qDebug() << "info.suffix()" << info.suffix();qDebug() << "info.completeSuffix()" << info.completeSuffix();//和suffix的區別在   QFileInfo fi("/tmp/archive.tar.gz");QString ext = fi.completeSuffix();  // ext = "tar.gz"  //如果是suffix(),則結果是gzqDebug()<<fileinfo.created().time().hour();qDebug()<< fileinfo.created().toString("dd-MM-yyyy hh:mm:ss ap");//結果
//D:/code_qt/resource/009qfile/你好utf-8.txt
//info.isDir() false
//info.isSymLink() false
//info.isFile() true
//info.isExecutable() false
//info.baseName() "你好utf-8"
//info.completeBaseName()  "你好utf-8"
//info.suffix() "txt"
//info.completeSuffix() "txt"
//15
//"30-03-2025 03:04:14 下午"

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

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

相關文章

EF Core表達式樹

文章目錄 前言一、表達式樹與委托的區別二、動態構建表達式樹示例1示例2示例3高級技巧&#xff1a;表達式合并 三、ExpressionTreeToString安裝方法基本用法支持的格式化風格 四、注意事項總結 前言 在 Entity Framework Core 中&#xff0c;表達式樹&#xff08;Expression T…

NVM安裝速通使用手冊(Windows版)NVM管理node版本命令手冊 NVM使用手冊

nvm&#xff08;Node Version Manager&#xff09;是一個用于管理Node.js版本的命令行工具。通過nvm&#xff0c;你可以在同一臺機器上安裝和切換多個Node.js版本&#xff0c;非常適合開發和測試在不同Node.js版本上運行的應用程序 一、安裝地址 1. 官方下載&#xff1a; &…

vLLM命令行使用方法詳解

vLLM 是一個針對大語言模型(LLMs)優化的高效推理和服務庫。以下是 vLLM 命令行工具的詳細使用方法解析,涵蓋常見場景和參數配置: 一、核心命令行工具 vLLM 提供兩個主要的命令行入口: 啟動 API 服務器 用于部署 HTTP/OpenAI 兼容的 API 服務: python -m vllm.entrypoint…

# 基于 OpenCV 的選擇題自動批改系統實現

在教育領域&#xff0c;選擇題的批改工作通常較為繁瑣且重復性高。為了提高批改效率&#xff0c;我們可以利用計算機視覺技術&#xff0c;通過 OpenCV 實現選擇題的自動批改。本文將詳細介紹如何使用 Python 和 OpenCV 實現一個簡單的選擇題自動批改系統。 1. 項目背景 選擇題…

python黑科技:無痛修改第三方庫源碼

需求不符合 很多時候&#xff0c;我們下載的 第三方庫 是不會有需求不滿足的情況&#xff0c;但也有極少的情況&#xff0c;第三方庫 沒有兼顧到需求&#xff0c;導致開發者無法實現相關功能。 如何通過一些操作將 第三方庫 源碼進行修改&#xff0c;是我們將要遇到的一個難點…

第十三章:優化內存管理_《C++性能優化指南》_notes

優化內存管理 一、內存管理基礎概念二、自定義分配器三、智能指針優化重點知識代碼示例&#xff1a;智能指針性能對比 四、性能優化關鍵點總結多選題設計題答案與詳解多選題答案設計題示例答案&#xff08;第1題&#xff09; 一、內存管理基礎概念 重點知識 動態內存分配開銷…

python筆記之函數

函數初探 python在要寫出函數很簡單&#xff0c;通過關鍵字def即可寫出&#xff0c;簡單示例如下 def add(a, b):return ab 以上即可以定義出一個簡單的函數&#xff1a;接收兩個變量a和b&#xff0c;返回a和b相加的結果&#xff0c;當然這么說也不全對&#xff0c;原因就是…

【服務器操作指南 - GPU 使用與文件傳輸】輕松掌握 GPU 狀態查看和服務器文件傳輸技巧

0. 引言 在使用服務器時&#xff0c;高效管理 GPU 和文件傳輸是兩項不可或缺的技能。 本指南旨在幫助您快速掌握服務器環境下的 GPU 使用狀態監測方法&#xff0c;并簡要介紹如何在服務器之間進行文件傳輸操作。 1. 查看服務器上的 gpu 使用狀態 1.1 安裝 gpustat 這條指令…

0330-YYYY-MM-DD格式日期比較大小

最簡單的&#xff08;python&#xff09; from datetime import datetime def compare_time(time1,time2): time1_t datetime.strptime(time1,“%Y-%m-%d”) time2_t datetime.strptime(time2,“%Y-%m-%d”) if time1_t < time2_t: return time1_t elif time1_t > ti…

QFlightInstruments飛行儀表控件庫

QFlightInstruments 是一個開源的飛行儀表控件庫&#xff0c;專為基于 Qt 的應用程序設計。它提供了一系列仿真實飛機儀表的組件&#xff0c;適用于飛行模擬軟件、航空電子系統或任何需要高仿真飛行儀表顯示的項目。 主要功能 高仿真飛行儀表&#xff1a;包括空速表、高度表、…

VSCode 市場發現惡意擴展正在傳播勒索軟件!

在VSCode 市場中發現了兩個隱藏著勒索軟件的惡意擴展。其中一個于去年 10 月出現在微軟商店&#xff0c;但很長時間沒有引起注意。 這些是擴展ahban.shiba 和 ahban.cychelloworld&#xff0c;目前已從商店中刪除。 此外&#xff0c;ahban.cychelloworld 擴展于 2024 年 10 月…

國信華源攜AI+水利創新成果亮相第十五屆防汛抗旱信息化技術交流會

直擊展會現場 近日&#xff0c;以“人工智能賦能防汛抗旱 融合創新共御極端災害”為主題的第十五屆防汛抗旱信息化技術交流會在河南鄭州召開。作為水旱災害防御領域的專精企業&#xff0c;北京國信華源科技有限公司攜自主研發的入戶叫應預警系統及覆蓋防汛抗旱全鏈條的智慧化場…

MATLAB語言的鏈表反轉

MATLAB語言的鏈表反轉 鏈表是一種常見的數據結構&#xff0c;與數組相比&#xff0c;鏈表在插入和刪除操作方面具有更高的靈活性。然而&#xff0c;鏈表的一些操作&#xff0c;比如反轉鏈表&#xff0c;對一些初學者來說可能是一個挑戰。本篇文章將重點討論如何使用MATLAB語言…

Oracle數據庫數據編程SQL<2.2 DDL 視圖、序列>

目錄 一、Oracle 視圖(Views) &#xff08;一&#xff09; Oracle 視圖特點 &#xff08;二&#xff09;Oracle 視圖創建語法 關鍵參數&#xff1a; &#xff08;三&#xff09;Oracle 視圖類型 1、普通視圖 2、連接視圖&#xff08;可更新&#xff09; 3、對象視圖 4…

QtAdvancedStylesheets使用

QtAdvancedStylesheets 是一個基于 Qt Widgets 的樣式表(QSS)增強庫,允許開發者通過類似 CSS 的方式深度定制 Qt 應用程序的界面風格,支持動態主題切換、動畫效果和復雜控件樣式設計。 1. 核心功能 高級樣式表支持 使用 CSS-like 語法美化 Qt Widgets(如 QPushButton、Q…

QtAV入門

QtAV 是一個基于 FFmpeg 和 Qt 的高性能多媒體播放框架,提供強大的音視頻解碼、渲染和處理能力,適合開發跨平臺的播放器、視頻編輯和流媒體應用。 1. 核心功能 多格式支持 支持 H.264/H.265、VP9、AV1 等視頻編碼。 支持 MP3、AAC、Opus 等音頻編碼。 封裝格式:MP4、MKV、…

[ C++ ] | C++11 從左值引用到右值引用

&#xff08;目錄占位&#xff09; 1. 前言&#xff1a; C 11 是在 C 98 之后又一個變化比較大的標準。為C增加了很多東西&#xff0c;其中有一部分是有用的&#xff0c;有一部分是我自認為作用不是很大東西。這一章呢&#xff1f;我們就來說說C11我&#xff0c;我認為對性能…

基于MCU實現的電機轉速精確控制方案:軟件設計與實現

本文將詳細介紹一篇基于微控制器&#xff08;MCU&#xff09;的電機轉速精確控制的軟件方案。通過采樣PWM信號控制和ADC采樣技術&#xff0c;結合PID閉環控制算法&#xff0c;實現了電機轉速的高效、穩定調節。以下是軟件方案流程圖&#xff0c;下文將對其進行展開講解。 原圖太…

Jmeter觸發腳本備份

JMeter 在以下情況會觸發腳本備份&#xff1a; 手動保存測試計劃時&#xff1a;如果測試計劃有未保存的修改&#xff0c;當用戶手動保存測試計劃&#xff08;腳本&#xff09;時&#xff0c;JMeter 都會自動將當前腳本備份到${JMETER_HOME}/backups文件夾下。 關閉 JMeter 時…

AI人工智能-PyCharm的介紹安裝應用

下載與安裝 創建python項目 項目路徑&#xff1a;C:\Users\miloq\Desktop\python_project 配置環境 提前找到conda配置的python-base路徑 配置conda環境 運行項目 運行結果