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 }