文件操作QFile和QDataStream
一、QFlie文件读写
#include<QFile>
#include<QFileDialog>//文件对话框
1、读文件
1 QString path = QFileDialog::getOpenFileName(this,//指定父对象 2 "open", "../", "TXT(*.txt)");//对话框的名字 路径 3 if(!path.isEmpty()) 4 { 5 QFile file(path);//创建文件对象 6 7 //打开文件,只读方式 8 if(file.open(QIODevice::ReadOnly)) 9 { 10 #if 0 11 QByteArray array = file.readAll(); //默认只识别utf8编码,可以通过文本流读其他的编码 12 //显示到编辑区 13 ui->textEdit->setText(QString(array)); 14 #endif 15 QByteArray array; 16 while( file.atEnd() == false) 17 { 18 array += file.readLine();//读一行 19 } 20 ui->textEdit->setText(array); 21 } 22 file.close(); 23 }
2、写文件
1 QString path = QFileDialog::getSaveFileName(this, "save", "../", "TXT(*.txt)"); 2 if(!path.isEmpty()) 3 { 4 QFile file; //创建文件对象 5 //关联文件名字 6 file.setFileName(path); 7 if(file.open(QIODevice::WriteOnly))//只写 8 { 9 QString str = ui->textEdit->toPlainText();//获取编辑区内容 10 //写文件 QString -> QByteArray 11 file.write(str.toUtf8()); 12 //file.write(str.toStdString().data());//QString->c++ string->char * 13 //file.write(str.toLocal8Bit());//转换为本地平台编码 14 } 15 file.close(); 16 }
二、QFlieInfo获取文件信息
QFileInfo info(path);
qDebug() << "文件名字:" << info.fileName().toUtf8().data();//转为UTF-8编码 转为char*字节数组
qDebug() << "文件后缀:" << info.suffix();
qDebug() << "文件大小:" << info.size();
qDebug() << "文件创建时间:" <<info.created().toString("yyyy-MM-dd hh:mm:ss");
//2016-01-04 15:13:00 y年 M月 d日...
//create()的返回值是QDateTime
三、QDataStream 数据流
处理二进制流 音频、图像等都可以
1、写文件
1 QFile file("../test.txt");//创建文件对象 QDataStream也用QFile创建文件对象 2 if(file.open(QIODevice::WriteOnly)) 3 { 4 //创建数据流,和file文件关联 5 //往数据流中写数据,相当于往文件里写数据 6 QDataStream stream(&file); 7 stream << QString("主要看气质") << 250; 8 file.close(); 9 }
2、读文件
1 #define cout qDebug() << "[" << __FILE__ <<":" << __LINE__ << "]" 2 QFile file("../test.txt"); 3 if(file.open(QIODevice::WriteOnly)) 4 { 5 QDataStream stream(&file); 6 QString str; 7 int a; 8 stream >> str.totf8().date() >> a;//读文件的顺序和写文件的顺序一样 9 cout << str.toUtf8().data() << a; 10 file.close(); 11 }
四、QTextStream文本流//可以指定编码进行读写
1、写文件
1 QFile file(); 2 file.setFileName("../test.txt"); 3 if(file.open(QIODevice::WriteOnly)) 4 { 5 /* 也可以和QDataStream的用法一样 */ 6 7 QTextStream stream(&file); 8 stream.setCodec("UTF-8");//指定编码 9 stream << QString("主要看气质") << 250;//写文件 10 file.close(); 11 }
2、读文件
1 QFile file("../demo.txt"); 2 if(file.open(QIODevice::ReadOnly)) 3 { 4 QTextStream stream(&file); 5 //指定编码 6 stream.setCodec("UTF-8"); 7 #if 0//error 8 QString str = stream.readAll(); 9 ui->textEdit->setText(str); 10 QString str; 11 int a; 12 stream >> str >> a; 13 cout << str.toUtf8().data() << a;//str 会取出所有的数据,然后a的值为0 14 #endif 15 16 QString str = stream.readAll(); 17 ui->textEdit->setText(str); 18 file.close(); 19 }