文件操作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     }
 
原文地址:https://www.cnblogs.com/wangbin-heng/p/9521048.html