QT基础(七)----File文件读写

一 文件的读写

 头文件 MyWidget.h


#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>

class MyWidget : public QWidget
{
    Q_OBJECT
public:
    explicit MyWidget(QWidget *parent = 0);

signals:

public slots:
};

#endif // MYWIDGET_H

源文件MyWidget.cpp

#include "MyWidget.h"
#include<QApplication>
#include<QFile>
#include<QByteArray>        //字节
#include<QDebug>
#include<QBuffer>
#include<QPixmap>
#include<QLabel>
#include<QTextStream>
#include<QDataStream>

/*
 * <QIODevice>类是所有QT关于文件操作的父类
 * QFile
 * QBuffer  内存文件,IO的目标
 * QTcpSocket
 * QUdpSocket
 * QDataStream  数据流,实质是IO的方法
 * QTextStream  文本流
 *
*/

MyWidget::MyWidget(QWidget *parent) : QWidget(parent)
{
#if 0
    QFile file("../text.txt");           //指定要打开的文件
    file.open(QIODevice::ReadWrite);     //打开文件的模式
    file.write("abc");                   //向文件里写东西,有多个重载函数
    file.close();                        //关闭文件

    QString str("中国");                  //
    QByteArray qba("中国");               //传递东西的时候一般用这个,传递原始数据,任何数据都可以

    qDebug()<< str.size() << qba.size();    //打印 2 6

    file.close();
#endif

#if 0
    QBuffer buffer;                     //直接存在内存中,相对于其他的要快
    buffer.open(QIODevice::ReadWrite);
    buffer.write("ABCDEFG");
    buffer.write("abcdefg");
    buffer.close();
    qDebug()<<buffer.buffer();          //查看buffer中的内容,打印ABCDEFGabcdefg

    buffer.close();
#endif

#if 0
    //图100
    //内存文件的应用
    //将文件读到内存中
    QBuffer buffer;
    buffer.open(QIODevice::ReadWrite);
    QPixmap pixmap = ("../pic.jpg");
    pixmap.save(&buffer, "JPG");             //第二个参数保存文件格式
    qDebug()<<buffer.size();

    //将内存中的数据读出来
    QPixmap pixmap2;
    pixmap2.loadFromData(buffer.buffer(), "JPG");

    //将读出来的数据打印到窗口上
    QLabel *label = new QLabel(this);
    label->setPixmap(pixmap);

    buffer.close();
#endif

#if 0
    QFile file("../testTextStream.txt");    //创建testTextStream.txt文件
    file.open(QIODevice::ReadWrite);

    QTextStream textStream(&file);          //绑定输出路径
    //输出:??-???China123456
    textStream<<"中国"<<"China"<<123456;  //将输入转化为字符串,方便写入但是不方便读出

    file.close();
#endif

#if 0
    //方便写入和读出
    QFile file("../testDataStream.txt");
    file.open(QIODevice::ReadWrite);
    QDataStream dataStream(&file);
    dataStream<<"中国"<<"China"<<123456<<QPoint(1, 1);        //打印的东西不是人看的

    file.close();
#endif

#if 0
    //将刚刚写入文件的数据读进来
    QFile file("../testDataStream.txt");
    file.open(QIODevice::ReadWrite);
    QDataStream dataStream(&file);

    char *ch;
    char *ch2;
    int num;
    QPoint pt;

    dataStream>>ch>>ch2>>num>>pt;   //读数据,自动格式化

    qDebug()<<ch<<ch2<<num<<pt;     //打印:中国 China 123456 QPoint(1,1)

    file.close();
#endif

    //虚拟内存
    QString _str = "../virtual.data";
    QFile file(_str);
    file.open(QIODevice::ReadWrite);
//    file.seek(64*1024);     //为虚拟内存开辟64k的空间
//    file.write("0");        //在最后一个字节处写一个字符
//    file.close();           //空间开辟好了
    file.resize(_str, 64*1024);     //注释掉的代码可以用着一行代码代替
//    file.open(QIODevice::ReadWrite);
    //理解关于文件映射的原理
    uchar *puc = file.map(0, 64*1024);  //从0字节开始开辟64k内存
    puc[0] = 'a';
    puc[1] = 'b';

    file.unmap(puc);        //关闭虚拟内存
    file.close();

    //结果:在上一层文件中新建一个64k大小的virtual.data文件,格式改成.txt后里边有a和b字符

}

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    MyWidget w;
    w.show();

    app.exec();
}


文件打印结果都在注释中了!
其中有一个图的打印结果:

你可能感兴趣的:(文件,qt)