Qt学习(四):qt读写文件
生活随笔
收集整理的這篇文章主要介紹了
Qt学习(四):qt读写文件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
知識點
結果演示
widget.h
#ifndef WIDGET_H #define WIDGET_H#include <QWidget>namespace Ui { class Widget; }class Widget : public QWidget {Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();private slots:void on_ReadButton_clicked();void on_WriteButton_clicked();//通過文件流讀寫文件void writeDate();void readDate();//第三種方式通過QTextStream讀寫文件void writeDateTextStre();void readDateTextStre();//第四種方式通過內存文件QBuffer讀寫文件void WriteReadBuffer();private:Ui::Widget *ui;};#endif // WIDGET_Hwidget.cpp
#include "widget.h" #include "ui_widget.h" #include <QFileDialog> #include <QFile> #include <QFileInfo> #include <QDebug> #include <QDateTime> #include <QDataStream> #include <QTextStream> #include <QBuffer>//內存文件#define cout qDebug() << "[" << __FILE__ <<":" << __LINE__ << "]"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);//第二種方式通過QDataStream讀寫文件writeDate();readDate();//第三種方式通過QTextStream讀寫文件writeDateTextStre();readDateTextStre();//第四種方式通過內存文件QBuffer讀寫文件WriteReadBuffer(); }Widget::~Widget() {delete ui; }void Widget::on_ReadButton_clicked() {QString path=QFileDialog::getOpenFileName(this, tr("Open File"),"../",tr("Text files (*.txt);;Images (*.png *.xpm *.jpg)"));//路徑打開了if(!path.isEmpty()){//文件對象QFile file(path);bool openOk=file.open(QIODevice::ReadOnly);if(openOk){#if 0//讀文件,默認只識別utf8編碼QByteArray array=file.readAll();//顯示到編輯區ui->textEdit->setText(array); #endifQByteArray array;while(!file.atEnd()){//讀一行array+=file.readLine();}ui->textEdit->setText(array);}file.close();}//QFileInfo獲取文件信息QFileInfo FileDate(path);qDebug()<<FileDate.exists();if(FileDate.exists()){qDebug() << "文件名字:" <<FileDate.fileName();qDebug() << "文件大小:" << FileDate.size()<<"bit";qDebug() << "文件創建時間:" <<FileDate.created().toString("yyyy-MM-dd hh:mm:ss");} }void Widget::on_WriteButton_clicked() {QString path=QFileDialog::getSaveFileName(this, tr("Save File"),"../",tr("Text files (*.txt);;Images (*.png *.xpm *.jpg)"));//成功了if(!path.isEmpty()){//文件對象QFile file(path);//打開文件,只寫方式bool openOk=file.open(QIODevice::WriteOnly);if(openOk){//獲取編輯區內容QString str=ui->textEdit->toPlainText();//顯示中文,轉為uft8QByteArray strArray=str.toUtf8();file.write(str.toUtf8());}file.close();}}//通過文件流讀寫文件 void Widget::writeDate(){QString path("../dateTxt.txt");//qDebug()<<path;//創建文件對象QFile file(path);//打開文件,只寫方式bool openOk=file.open(QIODevice::WriteOnly);if(openOk){//創建數據流,和file文件關聯//往數據流中寫數據,相當于往文件里寫數據QDataStream stream(&file);stream<<QString("QDataStream 今年年齡:")<<26;file.close();} }void Widget::readDate(){QString path("../dateTxt.txt");//qDebug()<<path;//創建文件對象QFile file(path);//打開文件,只寫方式bool openOk=file.open(QIODevice::ReadOnly);if(openOk){//創建數據流,和file文件關聯//往數據流中讀數據,相當于往文件里讀數據QDataStream stream(&file);//讀的時候,按寫的順序取數據QString str;int a;stream>>str>>a;//qDebug() << str.toUtf8().data() << a;cout << str.toUtf8().data() << a;file.close();} }//第三種方式通過QTextStream讀寫文件 void Widget::writeDateTextStre(){QString path("../DemoTxt.txt");//qDebug()<<path;//創建文件對象QFile file(path);//打開文件,只寫方式bool openOk=file.open(QIODevice::WriteOnly);if(openOk){//創建數據流,和file文件關聯//往數據流中寫數據,相當于往文件里寫數據QTextStream stream(&file);//指定編碼stream.setCodec("UTF-8");stream<<QString("QTextStream 今年年齡:")<<26;file.close();}}/*使用readData()函數的話,能夠輸出結果,只是輸出的結果中會多出一個0;* 這是因為利用這種辦法它并不能判斷字符串的結尾,所以就將str和a當成一個字符串了,到后面要輸出a的時候,* 里面已經沒有內容了,于是就輸出了0;* 這也說明使用這種方式讀內容的話,并不安全,* 所以應該采用readall、readline的方式 */ void Widget::readDateTextStre(){QString path("../DemoTxt.txt");//qDebug()<<path;//創建文件對象QFile file(path);//打開文件,只寫方式bool openOk=file.open(QIODevice::ReadOnly);if(openOk){//創建數據流,和file文件關聯//往數據流中寫數據,相當于往文件里寫數據QTextStream stream(&file);//指定編碼stream.setCodec("UTF-8");// QString str01=stream.readAll(); // cout<<str01;QByteArray str;while(!file.atEnd()){str+=file.readLine();}cout<<str;file.close();} }//第四種方式通過內存文件QBuffer讀寫文件 void Widget::WriteReadBuffer(){//QBuffer寫文件QBuffer merbuffer;merbuffer.open(QIODevice::WriteOnly);QDataStream stream(&merbuffer);stream<<QString("QBuffer 今年年齡:")<<26;merbuffer.close();//cout<<merbuffer.buffer();merbuffer.open(QIODevice::ReadOnly);QDataStream streamOut(&merbuffer);//讀的時候,按寫的順序取數據QString str;int a;streamOut>>str>>a;//qDebug() << str.toUtf8().data() << a;cout << str.toUtf8().data() << a;merbuffer.close(); }總結
以上是生活随笔為你收集整理的Qt学习(四):qt读写文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt学习(三):事件、定时器、事件过滤器
- 下一篇: Qt学习:棋盘游戏