12、文件操作
1、文件系统
QIODevice
-----QBuffer内存文件
-----QProcess进程相关
-----QFileDevice文件描述符类似操作
---QFile
---QTemporaryFile
----QAbstractSocket
---QTcpSocket---->QSslSocket
---QUdpSocket
2、读文件操作
1、一次性读完
QString path = QFileDialog::getOpenFileName(this, "open","../","TXT(*.txt)"); if(path.isEmpty() == false) { // 文件对象 打开文件 QFile file(path); bool isok = file.open(QIODevice::ReadOnly); if(isok == true) { // 读文件 一次读完 QByteArray arr = file.readAll(); // 显示到编辑区 ui->textEdit->setText(arr); } file.close(); }
2、一行一行读取数据
QByteArray buf; while(file.atEnd() == false) { buf += file.readLine(); } ui->textEdit->setText(buf);
3、写文件操作
1、保存文件
void Widget::on_buttonWrite_clicked() { // 返回新建文件路径及名称 ,并将按照指定格式、目录、新建文件 QString filename = QFileDialog::getSaveFileName(this, "save","../","TXT(*.txt)"); if(filename.isEmpty() == false) { QFile file; file.setFileName(filename); // 关联文件名称 // 打开文件夹 bool isok = file.open(QIODevice::WriteOnly); if(isok == true) { // 获取编辑区内容 QString str = ui->textEdit->toPlainText(); // 写文件 // 将QString-->String--->Char* file.write(str.toStdString().data()); } file.close(); } }
2、格式转换
// QString--->QByteArray QString str = 123; str.toUtf8() // qt4中不支持,qt5支持 中文使用比较友好 // QString---》QByteArray 本地编码 适合本平台的QByteArray QString str1 = "12346"; QByteArray a = str1.toLocal8Bit(); // 转换为QByteArray // QByteArray-->char* QByteArray a; char *p = a.data(); // QString---》QByteArray-->char* // 将QString-->String--->Char* file.write(str.toStdString().data()); // Char* -->QString char* p = "acvf"; QString c = QString(p);
4、获取文件信息
QString path = QFileDialog::getOpenFileName(this, "open","../","TXT(*.txt)"); // 获取文件信息 QFileInfo info(path); qDebug()<< "文件名字:"<<info.fileName().toStdString().data(); qDebug() << "文件后缀:"<< info.suffix(); qDebug() << "文件大小:"<< info.size(); qDebug() << "文件创建时间:"<< info.created().toString("yyyy-MM-dd hh:mm:ss");
5、QDataStream 读写文件
1、主要用来读写二进制文件,因此可以用来读写音频文件
2、读写顺序需要对应,第一次写什么类型的数据、读的时候,需要按照那个类型先读;
// 写文件操作 void Widget::writeData() { // 创建一个文件对象 QFile file("../test.log"); // 打开文件 bool isok = file.open(QIODevice::WriteOnly); if(isok == true) { // 创建一个数据流对象 // 数据流对象与文件关联起来 对数据流的操作相当于对文件操作 QDataStream stream(&file); stream << QString("主要看素质")<< 230; file.close(); } }
// 读文件操作 void Widget::readData() { // 创建一个文件对象 并与test.log 文件相关起来 QFile file("../test.log"); // 打开文件 bool isok = file.open(QIODevice::ReadOnly); if(isok == true) { // 创建一个数据流对象 // 数据流对象与文件关联起来 对流操作相当于对文件操作 QDataStream stream(&file); QString str; int a; stream >> str >>a; // 需要转换格式 //qDebug() << str.toUtf8().data()<< a; cout << str.toUtf8().data()<< a; file.close(); } }
6、常用的调试打印信息
#define cout qDebug() << "[" << __FILE__ <<":" << __LINE__ << "]" // 中间两个C语言中的宏,可以用来调试使用 // [ ..\QDateStream\widget.cpp : 57 ] 主要看素质 230
7、QTextStream 以文本的形式操作文件
1、可以指定编码格式,不局限于二进制格式
2、写操作的时候指定了编码格式,读的时候必须比配相应的格式
// 写文件操作 void Widget::writeTextData() { QFile file; file.setFileName("../test1.log"); // 与QFile file("../test1.log"); 一样 bool isok = file.open(QIODevice::WriteOnly); if(true == isok) { QTextStream stream(&file); // 将文件与数据流关联 // 指定数据流格式 为utf8 若不指定 会适配本地的编码 stream.setCodec("UTF-8"); // 会将输入的信息已指定的格式转为字符串 stream << QString("今天不天气哈不错")<< 120; } file.close(); }
/// 读文件操作 void Widget::readTextData() { QFile file; file.setFileName("../test1.log"); // 与QFile file("../test1.log"); 一样 bool isok = file.open(QIODevice::ReadOnly); if(true == isok) { QTextStream stream(&file); // 将文件与数据流关联 // 指定写时候的数据流格式 读的时候必须匹配格式 stream.setCodec("UTF-8"); // 读数据与二进制文件操作不同 需要按照文本格式读取 QString str = stream.readAll(); //stream.readLine(); qDebug() << str; } file.close(); }
8、内存文件QBuffer
1、类似于文件的打开、写操作
2、写操作,将数据写入内存缓冲区中;
 
// 简单操作 QBuffer buf; // 创建一个内存缓冲文件 buf.open(QIODevice::WriteOnly); buf.write("11111111111111"); // 数据写入缓冲区 buf.write("2233333333333333"); buf.write("秦川抒怀"); buf.close(); qDebug() << (buf.buffer()).data(); // 输出 字节数组中文乱码 需要转 // QBuffer指定写入的设备 QByteArray arr; QBuffer buffer(&arr); // 数据写入字节数组 作为缓冲区 buffer.open(QIODevice::WriteOnly); buffer.write("11111111111111"); // 数据写入缓冲区 buffer.write("2233333333333333"); buffer.write("秦川抒怀"); buffer.close(); qDebug() << (buffer.buffer()).data(); // 输出 字节数组中文乱码 需要转 qDebug() << arr.data(); // 打印字节数组中的内容 // 给设备写入文件 配合datastream使用 QBuffer devbuf; devbuf.open(QIODevice::WriteOnly | QIODevice::ReadOnly); // 需要打开才能被指定 QDataStream stream(&devbuf); // 指定内存文件 需要先打开 stream << QString("QBuffer和QDataStream配合使用")<< 140; // 试用完成需要关闭 devbuf.close(); qDebug() << devbuf.buffer(); // 读取设备中的数据 // 打开设备 devbuf.open(QIODevice::ReadOnly); QDataStream s1; s1.setDevice(&devbuf); QString str; int a; s1>> str>>a; devbuf.close(); qDebug() << str.toUtf8().data()<< a;
 
                    
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号