Qt中的QFile读写文件

概述:
文件操作是应用程序必不可少的部分。Qt 作为一个通用开发库,提供了跨平台 的文件操作能力。Qt 通过 QIODevice 提供了对 I/O 设备的抽象,这些设备具有 读写字节块的能力。下面是 I/O设备得类图(Qt5):
在这里插入图片描述

1,QIODevice:所有 I/O 设备类的父类,提供了字节块读写的通用操作以及基本接口;
2,QFileDevice:Qt5 新增加的类,提供了有关文件操作的通用实现。
3,QFlie:访问本地文件或者嵌入资源;
4,QTemporaryFile:创建和访问本地文件系统的临时文件;
5,QBuffer:读写 QbyteArray, 内存文件;
6,QProcess:运行外部程序,处理进程间通讯;
7,QAbstractSocket:所有套接字类的父类;
8,QTcpSocket:TCP 协议网络数据传输;
9,QUdpSocket:传输 UDP 报文;
10,QSslSocket:使用 SSL/TLS 传输数据;

文件系统分类:
顺序访问设备:
是指它们的数据只能访问一遍:从头走到尾,从第一个字节开始访问,直到最后一个字节,中途不能返回去读取上一个字节,这其中,QProcessQTcpSocketQUdpSoctetQSslSocket 是顺序访问设备。
随机访问设备:
可以访问任意位置任意次数,还可以使用 QIODevice::seek()函数来重新定位文件访问位置指针,QFileQTemporaryFileQBuffer 是随机访问设备.
使用QFile来读文件
QFile 提供了从文件中读取和写入数据的能力。 我们通常会将文件路径作为参数传给 QFile 的构造函数。不过也可以在创建好 对象最后,使用 setFileName()来修改,如下:

/*获取要打开的文件路径*/
QString path = QFileDialog::getOpenFileName(this,"open","../","source(*.cpp) ");
/*创建QFile对象并且将文件路径传给此对象*/
QFile file(path);

打开一个文件:

 QString path = QFileDialog::getOpenFileName(this,"open","../","source(*.cpp) ");

    if(path.isEmpty() == false)
    {
        //文件对象
        QFile file(path);
        //打开文件 只读方式
        if(file.open(QIODevice::ReadOnly) == true)
        {
        /*直接读取全部,默认是utf8编码*/
       #if 0
            //读文件 默认识别utf8编码
            QByteArray array = file.readAll();

            ui->textEdit->setText(QString(array));
            //
        #endif
	/*每次读一行,并且加到字符数组*/
            QByteArray array;
            while(file.atEnd() == false)
            {
                array += file.readLine();

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

使用QFile保存文件:

/*获取保存路径*/
QString path = QFileDialog::getSaveFileName(this,"save","../","souce(*.cpp)");

    if(path.isEmpty() == false)
    {
        QFile file;
        file.setFileName(path);

        //打开文件 只写方式
        if(file.open(QIODevice::WriteOnly) == true)
        {
        /*服务文本编辑区的文本信息*/
            QString str = ui->textEdit->toPlainText();
            
            //QString -> String -> char*
            /*转换为字符 C++固定,默认utf8*/
           // file.write(str.toStdString().data());
            file.write(str.toLocal8Bit());
            /*QString -> QByteArray*/
            QByteArray test;
            QString str2 = "tets";
            test = str2.toUtf8();//中文
            test = str2.toLocal8Bit();/*本地编码*/

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

            /*char* -> QString*/
            char *p = "123";
            QString c = QString(p);

        }
        file.close();

    }

关于写文件的时候类型转换注意事项:
1,将QString转换为utf8

    file.write(str.toUtf8());

2,将QString转换为char*

/*QString -> String -> char**/
file.write(str.toStdString().data());

3,QString转为字节数组

			QByteArray test;
            QString str2 = "tets";
            test = str2.toUtf8();//中文
            test = str2.toLocal8Bit();/*本地编码*/

4,字节数组转为char*

 char *a = test.data();

5,char*转为QString

char *p = "123";
QString c = QString(p);

使用QFileInfo获取文件信息
对于文件信息的获取,比如文件绝对路经,创建时间,以及文件后缀等采用QFileInfo类来获取,比如:

        QFileInfo info(path);
        qDebug() << "文件名字:"<<info.fileName().toUtf8().data();
        qDebug() << "文件后缀:"<<info.suffix();
        qDebug() << "文件大小:"<< info.size()/1024 << "KB";
        qDebug() << "文件创建时间"<< info.created().toString("yyyy-MM-dd hh:mm:ss");

注意:
对于文件名字默认是utf8需要转换成char*所以使用上述转换方法,
对于QDateTime 显示要想显示成为"2020-12-27 11:11:11:",需要转换成呢个QString并填写转换格式。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值