QT学习(十九)——用QFile读写文件

写文件:两种方法

1.第一种使用QString获取编辑区的内容之后直接用toUtf8()转化为QByteArray

2.第二种使用QString获取编辑区的内容之后先转化成std::string,再转换成char*,不过最后的文件类型都是UTF-8类型

但是最后都要记得要 file.close();来关闭文件!!

void Widget::forWrite()
{
    QString path=QFileDialog::getSaveFileName(this,"保存文件","../","TXT(*.txt)");
    if(!path.isEmpty())
    {
        //创建文件对象
        QFile file;
        //关联文件名字
        file.setFileName(path);
        //打开文件,只写方式
        bool isok=file.open(QIODevice::WriteOnly);
        if(isok==true)
        {
            //获取编辑区内容
            QString str=ui->text->toPlainText();
            //写文件
            //写文件操作的时候需要把QString类型转换成QByteArray
            file.write(str.toUtf8());
            
            /*换一种方法先把QString转换成std::string再转换成char*
             * file.write(str.toString().data());
             * 不过这样最后转换的txt文件依然是UTF-8类型
             */              
        }
        file.close();
    }
}

运行:

点写文件按钮

------------------------------------------------------------------------------

读取文件:两种方法

1.直接全部打开,使用QByteArray array=file.readAll(),再把array转化为QString类型打印在编辑区

2.一行行的打开,while (file.atEnd()==false){array+=file.readLine();},最后也把array转化为QString类型打印在编辑区

但是最后都要记得要 file.close();来关闭文件!!

还有很重要的一点:读文件,默认只识别utf-8编码,就是所打开文件必须UTF-8编码类型的,否则打开是乱码,像GB2312就不能直接这样打开

void Widget::forRead()
{
    QString path=QFileDialog::getOpenFileName(this,"读取文件","../","TXT(*.txt)");
    if(path.isEmpty()==false)
    {
        //创建文件对象
        QFile file(path);
        //打开文件,只读方式
        bool isok=file.open(QIODevice::ReadOnly);
        if(isok==true)
        {
            /*
            //读文件,默认只识别utf-8编码,就是所打开文件必须UTF-8编码类型的,否则打开是乱码,像GB2312就不能直接这样打开
            QByteArray array=file.readAll();
            //显示到编辑区
            ui->text->setText(QString(array));//直接显示也可以,他会有一个内部的默认转换 ui->text->setText(array);
            */

            //另一种方式来一行行的读取文件
            QByteArray array;
            while (file.atEnd()==false)
            {
               array+=file.readLine();
            }
            ui->text->setText(array);
        }
        //关闭文件
        file.close();
    }
}

 

运行:

点击读文件按钮

-----------------------------------------------------------------------------------

QString转化成QByteArray的几种方法:toUtf8()针对中文,toLocal8Bit()转换成本地编码(ANSI等根据系统而定,详见最后一张图)

 //把QString转化成QByteArray的几种方法
 QString buf="真的爱你";
QByteArray a=buf.toUtf8();//主要是针对有中文的时候
a=buf.toLocal8Bit();//转换成本地编码

------------------------------------------------------------------------------------

QByteArray转化成char*data函数

 //把QByteArray转化成char*
char*b=a.data();

-------------------------------------------------------------------

char*转化成Qstring:直接使用QString的构造函数

 //char*转化成QString
char*p="meeting you while i am missing you";
QString qs=QString(p);

------------------------------------------------------------------------

 转换成本地编码

 file.write(str.toLocal8Bit());

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值