QT文件读写:QFile、QDataStream、QTextStream、QBuffer

QFile

QFile读文件:

void Widget::QFile_Read()
{
    //获取文件路径(文件名)
    QString path = QFileDialog::getOpenFileName(this,"打开","../","TXT(*.txt)");

    if(path.isEmpty() == false)
    {
        //创建文件对象
        QFile file(path);
        //打开文件,只读方式
        bool isOK = file.open(QIODevice::ReadOnly);
        if(isOK == true)
        {
            //读取全部
#if 0
            //读文件,默认只识别utf8编码
            QByteArray array = file.readAll();//字节数组类型
            //显示到编辑区,QByteArray自动转换为QString类型
            ui->textEdit->setText(array);
#endif
            QByteArray array;
            while(file.atEnd() == false)
            {
                //读一行
                array += file.readLine();
            }
            //QString类型转换,这里不转换系统也会自动转换
            ui->textEdit->setText(QString(array));
        }

        //获取文件信息
        QFileInfo info(path);
        qDebug()<<"文件名字:"<<info.fileName().toUtf8().data();
        qDebug()<<"文件后缀:"<<info.suffix();
        qDebug()<<"文件大小:"<<info.size();
        qDebug()<<"文件创建时间:"<<info.created().toString("yyyy-MM-dd hh:mm:ss"); //2019-7-17 17:03:00

        //关闭文件
        file.close();
    }
}

QFile写文件:

void Widget::QFile_Write()
{
    QString path = QFileDialog::getSaveFileName(this,"保存","../","TXT(*.txt)");
    if(path.isEmpty() == false)
    {
        //创建文件对象
        QFile file;
        //关联文件名
        file.setFileName(path);

        //打开文件,只写方式
        bool isOK = file.open(QIODevice::WriteOnly);
        if(isOK == true)
        {
            //获取编辑区内容
            QString str = ui->textEdit->toPlainText();

            //写文件,QString -> QByteArray
            // file.write(str.toUtf8());

            //QString -> C++ string -> char*
            //file.write(str.toStdString().data());

            //转换为本地平台编码
            file.write(str.toLocal8Bit());

            //QString -> QByteArray
            QString buf = "123";
            QByteArray a = buf.toUtf8(); //包含中文
            a=buf.toLocal8Bit();//本地编码

            //QByteArray -> char *
            char *b = a.data();

            //char * -> QString
            //char *p = "abc";
            // QString c = QString(p);
        }
        file.close();
    }
}

QDataStream

QDataStream读文件:

void Widget::DataStreamWriteData()
{
    //创建文件对象
    QFile file("../test.txt");

    //打开文件,只写方式
    bool isOK = file.open(QIODevice::WriteOnly);
    if(isOK == true)
    {
        //创建数据流,和file文件关联
        //往数据流中写数据,相当于往文件里写数据
        QDataStream stream(&file);
        //保存的是二进制数据
        stream << QString("今天是7月18日") << 250;
    }
}

QDataStream写文件:

void Widget::DataStreamReadData()
{
    //创建文件对象
    QFile file("../test.txt");

    //打开文件,只读方式
    bool isOK = file.open(QIODevice::ReadOnly);
    if(isOK == true)
    {
        //创建数据流,和file文件关联
        //从数据流中读数据,相当于从文件里读数据
        QDataStream stream(&file);
        //读的时候,按写的顺序取数据
        QString str;
        int a;
        stream >> str >> a ;
        //qDebug()<
        cout << str.toUtf8().data()<<a;
        file.close();
    }
}

QTextStream

QTextStream读文件:

void Widget::TextStreamWriteData()
{
    QFile file;
    file.setFileName("../demo.txt");
    bool isOK = file.open(QIODevice::WriteOnly);
    if(true == isOK)
    {
        QTextStream stream(&file);
        //指定编码
        stream.setCodec("UTF-8");

        stream << QString("我喜欢喝农夫山泉") << 350;
    }
    file.close();
}

QTextStream写文件:

void Widget::TextStreamreadData()
{
    QFile file;
    file.setFileName("../demo.txt");
    bool isOK = file.open(QIODevice::ReadOnly);
    if(true == isOK)
    {
        QTextStream stream(&file);
        stream.setCodec("UTF-8");
        QString str;
        int a;
        stream >>str>>a;
        cout<<str.toUtf8().data()<<a;
    }
    file.close();
}

QBuffer

    QByteArray array;
    //创建内存文件
    QBuffer memFile(&array);
    memFile.open(QIODevice::WriteOnly);
    //写入缓冲区
    memFile.write("111111111");
    memFile.write("22222222222222");
    memFile.close();

    //写入缓冲区的内容会连在一起输出,/n也会被当成字符输出
    qDebug() << memFile.buffer();
    //也可以通过字节数组输出
    qDebug() <<"array:" << array;

    QBuffer memFile1;
    memFile1.open(QIODevice::WriteOnly);
    QDataStream stream(&memFile1);
    stream << QString("测试") << 250;
    memFile1.close();
    qDebug() << memFile1.buffer();
    memFile1.open(QIODevice::ReadOnly);
    QDataStream in;
    in.setDevice(&memFile1);
    QString str;
    int a;
    in >> str >> a;
    memFile1.close();

    qDebug() << str.toUtf8().data() << a;

你可能感兴趣的:(QT,c++)