Qt文件、目录操作相关总结一

1QFile

QFile类提供了读取和写入文件的接口。QFile是一个读写文本、二进制文件和资源的I/O设备。QFile可以自己使用,也可以更方便地与QTextStream或QDataStream一起使用。文件名通常在构造函数中传递,但它可以在任何时候使用setFileName()设置。不管操作系统是什么,QFile都希望文件分隔符是'/'。不支持使用其他分隔符(例如'\')。您可以使用exists()检查文件是否存在,并使用remove()删除文件。(更高级的文件系统相关操作由QFileInfo和QDir提供。)用open()打开文件,用close()关闭文件,用flush()刷新文件。通常使用QDataStream或QTextStream读写数据,但也可以调用qiodevice继承的函数read()、readLine()、readAll()、write()。QFile还继承getChar()、putChar()和ungetChar(),它们一次只处理一个字符。文件的大小由size()返回。可以使用pos()获取当前文件位置,也可以使用seek()移动到新的文件位置。如果已经到达文件的末尾,则atEnd()返回true。(翻译自Qt帮助文档)

 QFile file("in.txt");
      if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) //以只读的方式打开文本文件
          return;

      while (!file.atEnd()) {
          QByteArray line = file.readLine();
          process_line(line);
      }

使用QFile类是我们还可以对文件进行重命名,文件复制等操作

QFile::copy(fromDir, toDir) //文件复制时需要指定源文件路径名字和目标路径名字,返回值为bool类型

QFile::rename(fromFileName, toFileName) //文件重命名时需要指定源文件路径名字和目标路径名字,返回值为bool类型

如果未指定目标路径,修改后的文件会在应用程序目录下生成,同时在进行复制,重命名是建议添加函数的返回值判断是否操作成功

注:

1、在使用QFIle打开文件时,如果要确认文件的内容,使用readAll函数会导致file的读取位置达到文件末尾,会导致一些文件二次操作出现异常,如:QDomDocument使用setContent一会出现unexpected end of file;这是就需要使用seek(0)来将光标设置到文件的开始位置

2、在使用QFile读取qss样式文件时容易出现乱码,或者是qss文件在Qt creator下打开后,出现修改样式不生效的情况

      1、出现乱码的解决方式可以使用QTextCodec codec = QTextCodec::codecForName("GBK");设置文本编码格式后再读取

      2、出现qss文件在Qt creator下打开后,出现修改样式不生效的情况

            第一是可以重现加载一下qss文件刷新,第二种是可以使用QTextSream读取样式文件,因为:

QTextStream负责将存储在磁盘上的8位数据转换为16位Unicode QString。默认情况下,它假定使用用户系统的本地8位编码(例如,在大多数基于unix的操作系统上,UTF-8;参见QTextCodec::codecForLocale()获取详细信息)。这可以使用QTextStream::setCodec()来更改。要写入文本,可以使用操作符<<(),该操作符被重载,左边接受QTextStream,右边接受各种数据类型(包括QString):

        QFile file;
        file.setFileName(filePath);

        bool isOk = file.open(QIODevice::ReadOnly);
        if (isOk == true )
        {
            QTextStream stream(&file);

            //指定编码 (可不加)
            stream.setCodec("UTF-8");

            QString str = stream.readAll();
            ui->textEdit->setText(str);

            file.close();
        }

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值