QT學習筆記(11) 讀寫文件

1、QT的文件系統的類之間的關係數組

2、文件的讀寫ui

  (1)經過QFile讀寫文件this

  (2)QFileInfo獲取文件信息編碼

代碼以下:spa

mainwindow.hcode

 1 #ifndef MAINWINDOW_H
 2 #define MAINWINDOW_H
 3 
 4 #include <QMainWindow>
 5 
 6 namespace Ui {
 7 class MainWindow;
 8 }
 9 
10 class MainWindow : public QMainWindow
11 {
12     Q_OBJECT
13 
14 public:
15     explicit MainWindow(QWidget *parent = 0);
16     ~MainWindow();
17 
18 private slots:
19 
20     void on_buttonRead_clicked();
21 
22     void on_buttonWrite_clicked();
23 
24 private:
25     Ui::MainWindow *ui;
26 };
27 
28 #endif // MAINWINDOW_H

mainwindow.cpp對象

  1 #include "mainwindow.h"
  2 #include "ui_mainwindow.h"
  3 #include <QFile>
  4 #include <QFileDialog>
  5 #include <QDateTime>
  6 #include <QDebug>
  7 
  8 MainWindow::MainWindow(QWidget *parent) :
  9     QMainWindow(parent),
 10     ui(new Ui::MainWindow)
 11 {
 12     ui->setupUi(this);
 13 }
 14 
 15 MainWindow::~MainWindow()
 16 {
 17     delete ui;
 18 }
 19 
 20 void MainWindow::on_buttonRead_clicked()
 21 {
 22     QString path = QFileDialog::getOpenFileName(this,
 23                    "open","../","TXT(*.txt)");
 24     if(path.isEmpty() == false)//不爲空
 25     {
 26         QFile file(path);//文件對象
 27         //打開文件,只讀方式
 28         bool isOK = file.open(QIODevice::ReadOnly);
 29         if(isOK == true)
 30         {
 31 
 32             /*
 33             //讀文件,默認只識別UTF8
 34             //一次性讀完
 35             QByteArray array = file.readAll();
 36             //顯示到編輯區
 37             ui->textEdit->setText(QString::fromLocal8Bit(array));
 38             */
 39 
 40 
 41             //一行一行讀
 42             QByteArray array;
 43             while( file.atEnd() == false)
 44             {
 45                 //讀一行
 46                 array += file.readLine();
 47             }
 48             //顯示到編輯區
 49             ui->textEdit->setText(QString::fromLocal8Bit(array));
 50 
 51         }
 52         file.close();
 53 
 54         //獲取文件信息
 55         QFileInfo info(path);
 56         qDebug() << QString::fromLocal8Bit("文件名字:") <<info.fileName();
 57         qDebug() << QString::fromLocal8Bit("文件後綴:") <<info.suffix();
 58         qDebug() << QString::fromLocal8Bit("文件大小:") <<info.size();
 59         qDebug() << QString::fromLocal8Bit("文件建立時間:") <<
 60                     info.created().toString("yyyy-MM-dd hh:mm:ss");
 61 
 62     }
 63 }
 64 
 65 void MainWindow::on_buttonWrite_clicked()
 66 {
 67     QString path = QFileDialog::getSaveFileName(this,"save","../","TXT(*.txt)");
 68     if(path.isEmpty() == false)//不爲空
 69     {
 70         QFile file;//建立文件對象
 71         //關聯文件名字
 72         file.setFileName(path);
 73         //打開文件,只寫方式
 74         bool isOK = file.open(QIODevice::WriteOnly);
 75         if(isOK == true)
 76         {
 77             //獲取編輯區內容
 78             QString str = ui->textEdit->toPlainText();
 79             //寫文件
 80             //把QString轉換成QByteArray
 81             //file.write(str.toUtf8());
 82 
 83             //QString -> C++ string -> char *
 84             //file.write(str.toStdString().data());
 85 
 86             //把QString轉換成本地編碼
 87             file.write(str.toLocal8Bit());
 88 
 89 
 90             //字符類型的轉換
 91             //把QString轉換成QByteArray
 92             QString string = "123";
 93             QByteArray a = string.toUtf8();//主要是針對中文
 94             a = string.toLocal8Bit();//本地編碼
 95             //QByteArray -> char *
 96             char *b = a.data();
 97             //char * -> QString
 98             char *p = "abc";
 99             QString c = QString(p);
100 
101         }
102         file.close();
103 
104 
105     }
106 }

 

3、QDataStream、QTextStream、QBuffer類操做文件blog

  (1)QDataStream:二進制方式操做數據流
  (2)QTextStream:文本方式操做數據流
  (3)QBuffer:內存文件內存

代碼以下:ci

mainwindow.h

 1 #ifndef MAINWINDOW_H
 2 #define MAINWINDOW_H
 3 
 4 #include <QMainWindow>
 5 
 6 namespace Ui {
 7 class MainWindow;
 8 }
 9 
10 class MainWindow : public QMainWindow
11 {
12     Q_OBJECT
13 
14 public:
15     explicit MainWindow(QWidget *parent = 0);
16     ~MainWindow();
17 
18     void writeData();
19     void readData();
20 
21     void buffer();
22 
23 private:
24     Ui::MainWindow *ui;
25 };
26 
27 #endif // MAINWINDOW_H

mainwindow.cpp

  1 #include "mainwindow.h"
  2 #include "ui_mainwindow.h"
  3 #include <QDataStream>//二進制方式操做數據流
  4 #include <QTextStream>//文本方式操做數據流
  5 #include <QBuffer>//內存文件
  6 #include <QByteArray>
  7 #include <QFile>
  8 #include <QDebug>
  9 //宏定義,輸出 代碼所在位置 和 所在行數
 10 #define cout qDebug() << "[" << __FILE__ << ":" << __LINE__ << "]"
 11 
 12 MainWindow::MainWindow(QWidget *parent) :
 13     QMainWindow(parent),
 14     ui(new Ui::MainWindow)
 15 {
 16     ui->setupUi(this);
 17 
 18     writeData();
 19     readData();
 20 
 21     buffer();
 22 
 23 }
 24 
 25 MainWindow::~MainWindow()
 26 {
 27     delete ui;
 28 }
 29 void MainWindow::writeData()
 30 {
 31     //二進制方式操做數據流
 32     /*
 33     //建立文件對象
 34     QFile file("../test.txt");
 35     //打開文件,只寫方式
 36     bool isOK = file.open(QIODevice::WriteOnly);
 37     if(isOK == true)
 38     {
 39         //建立數據流,和file文件關聯
 40         //往數據流中輸數據,至關於往文件裏寫數據
 41         QDataStream stream(&file);
 42         //二進制編碼,因此寫的文本文檔打開後的內容是亂碼
 43         stream << QString("")<<250;//往數據流輸入數據,,是以二進制的形式輸入
 44         file.close();
 45     }
 46     */
 47 
 48 
 49     //文本方式操做數據流
 50     QFile file;
 51     file.setFileName("../demo.txt");
 52     bool isOK = file.open(QIODevice::WriteOnly);
 53     if(isOK == true)
 54     {
 55         QTextStream stream(&file);
 56         //默認是平臺編碼,因此文本能夠直接看到內容
 57         //能夠指定編碼
 58         stream.setCodec("UTF-8");
 59         stream << QString("")<<250;
 60         file.close();
 61     }
 62 
 63 }
 64 void MainWindow::readData()
 65 {
 66 
 67     //二進制方式操做數據流
 68     /*
 69     //建立文件對象
 70     QFile file("../test.txt");
 71     //打開文件,只讀方式
 72     bool isOK = file.open(QIODevice::ReadOnly);
 73     if(isOK == true)
 74     {
 75         //建立數據流,和file文件關聯
 76         //從數據流中讀數據,至關於從文件裏讀數據
 77         QDataStream stream(&file);
 78         //讀的時候,按寫的順序取數據
 79         QString str;
 80         int a;
 81         stream >> str >> a;
 82         qDebug() << str.toUtf8().data() << a ;
 83         cout << str.toUtf8().data() << a ;
 84 
 85         file.close();
 86     }
 87     */
 88 
 89 
 90     //文本方式操做數據流
 91     QFile file;
 92     file.setFileName("../demo.txt");
 93     bool isOK = file.open(QIODevice::ReadOnly);
 94     if(isOK == true)
 95     {
 96         QTextStream stream(&file);
 97         //默認是平臺編碼,因此文本能夠直接看到內容
 98         //能夠指定編碼
 99         stream.setCodec("UTF-8");
100 
101         //此處讀文件的時候,不須要象QDataStream同樣先按照類型讀
102         QString str = stream.readAll();
103         cout << str.toUtf8().data() ;
104         file.close();
105     }
106 
107 
108 }
109 
110 void MainWindow::buffer()
111 {
112     QByteArray array;
113     QBuffer memFile(&array);//將緩衝區的內容存到數組中
114     //QBuffer memFile;//建立內存文件
115     memFile.open(QIODevice::WriteOnly);
116     memFile.write("11111111");//寫到緩衝區
117     memFile.write("22222222");
118     memFile.close();
119     qDebug() << memFile.buffer();//獲得緩衝區的內容
120     qDebug() << "array" << array;
121 }
相關文章
相關標籤/搜索