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

    技术2023-10-04  104

    写文件:两种方法

    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());

    Processed: 0.016, SQL: 10