QT文件读写操作和内容提取

访问IO设备,需要先调用open()来设置正确的OpenMode(例如ReadOnly或ReadWrite)

打开设备后后,使用write() 或putChar() 写入数据到文件和设备,并通过调用read(),readLine()
或readAll() 进行读取;使用完设备后,还需调用close()。QIODevice区分两种类型的设备:随机访问设备(Random-access devices)和顺序设备(Sequentialdevices)。

 1,QFile

QFile是用于文件的创建、读写、复制、删除等等,可以实现文本文件和二进制文件的读写。 QFile 的接口函数可以参考下Qt帮助文档,下面程序是读取普通文件按行提取。QFile一般用来读写文件文件,文件流操作类QTextStream和QTextStream用来读写二进制文件。

       QFile file(textfile);
        //当文件无法进行读操作的时候,将弹出信息框
        if(!file.open(QFile::ReadOnly|QFile::Text))
        {
            QMessageBox::warning(this,tr("Error"),tr("read file error:&1").arg(file.errorString()));
            return;
        }
        else
        {
                    QString line;
                    QTextStream in(&file);  //用文件构造流
                    line = in.readLine();//读取一行放到字符串里
                    qDebug() << line;
                    while(!line.isNull())//字符串有内容
                    {
                        line=in.readLine();//循环读取下行
                        qDebug() << line;
                    }
        }

2,QTextStream

QTextStream类提供了用于读取和写入文本的便捷接口。QTextStream可以操作QIODevice, QByteArray和QString,调用QTextStream的流操作可以方便的读取文字、行、数字等,还提供了文本填充和对齐的相关格式。QTextStream内部使用基于Unicode的缓冲区,并且QTextStream使用QTextCodec自动支持不同 的字符集。默认情况下,QTextCodec::codecForLocale() 用于读取和写入,但是您也可以通过调用setCodec() 来设置编解码器。QTextStream还支持自动Unicode检测, 启用此功能(默认行为)后,QTextStream将检测UTF-16或UTF-32 BOM(Byte Order Mark,字节顺序标记),并在读取时切换到适当的UTF编解码器。QTextStream默认情况下不编写BOM,但是您可以通过调用setGenerateByteOrderMark(true)来启用它,当QTextStream直接在QString上运行时,将禁用编解码器。

  // 用文本流写入指定文件
  void MainWindow::on_btn_QTextStream_write_clicked()
  {
      QFile file(m_textstreampath);
      if (!file.open(QIODevice::WriteOnly|QIODevice::Text))
       return;
 
      ui->lineEdit->setText(m_textstreampath);
      QTextStream out(&file); //用文本流读取文件内容
      out << ui->textEdit->toPlainText();
      file.close();
}

void MainWindow::on_btn_QTextStream_read_clicked()
{
    QFile file(m_textstreampath);
    if (!file.open(QFile::ReadOnly|QIODevice::Text))
    return;
 
    QTextStream in(&file); //用文本流读取文件内容
    ui->lineEdit->setText(m_textstreampath);
    ui->textEdit->clear();
    QString str = in.readAll(); //读取全部内容
    ui->textEdit->append(str); //显示内容
    file.close();
}

void MainWindow::on_cBox_Codec_currentIndexChanged(const QString &arg1)
{
    QTextCodec::setCodecForLocale(QTextCodec::codecForName(arg1.→ toLocal8Bit()));
}

3,QDataStream

QDataStream类用于对数据进行二进制格式的读/写操作。QDataStream可以序列化C++的基本数
据类型的功能,也就是可以将数据按照某种特定的二进制编码进行解析或存储,另外也可以读
取/写入未编码的原始二进制数据。
QDataStream以数据流的方式读写文件,使用Qt预定义的编码方式或者是原始二进制的数据方
式,下面读取和写入文件,先使用QFile这种普通读写,然后转成数据流或者字节流读取,这样
便于操作,而且不会乱码。

void MainWindow::on_btn_QDataStream_write_clicked()
{
      static int writeCount=0;

      QFile file(m_datastreampath);
      ui->lineEdit->setText(m_datastreampath);
      if(file.open(QIODevice::WriteOnly))
      {
          QDataStream out(&file);
          out << ui->textEdit->toPlainText();
          out << ++writeCount;
         file.close();
      }
}
 
void MainWindow::on_btn_QDataStream_read_clicked()
{
       QFile file(m_datastreampath);
       ui->lineEdit->setText(m_datastreampath);
       if(file.open(QIODevice::ReadOnly))
       {
          QDataStream in(&file);
          QString str;
          int writeCount;
          in >> str >> writeCount;
          file.close();
          ui->textEdit->clear();
          ui->textEdit->append(str);
          ui->textEdit->append(QString::number(writeCount));
       }
}

4,QDir

QDir用于操纵路径名,访问有关路径和文件的信息以及操纵底层文件系统。

5,QFileInfo

QFileInfo类提供与系统无关的文件信息,获取关文件在文件系统中的名称和位置(路径),以及文件的权限和文件类型,文件的大小和上次修改/读取的时间也通过接口获取。QFileInfo可以指向具有相对或绝对文件路径的文件。

6,QFileSystemWatcher

QFileSystemWatcher通过观察指定路径的列表来监视文件系统中文件和目录的更改,当文件已被
修改,重命名或从磁盘中删除就会发送fileChanged()。当目录或其内容被修改或删除时,会发出directoryChanged()信号。一旦文件被重命名或从硬盘删除或者是目录从磁盘上删除,QFileSystemWatcher将停止监控。

void MainWindow::on_btn_Watch_clicked()
{
      QString curPath=QDir::currentPath();//获取应用程序的路径
      QString dlgTitle="选择文件夹"; //对话框标题
      QString dirname=QFileDialog::getExistingDirectory(this,dlgTitle,→ curPath);
      if (dirname.isEmpty())
         return;
 
      QFileSystemWatcher *fileSystemWatcher = new QFileSystemWatcher(this);
         fileSystemWatcher->addPath(dirname);
 
      connect(fileSystemWatcher,SIGNAL(directoryChanged(const QString &)),
->this, SLOT(handDirChanged(const QString &)));
     connect(fileSystemWatcher,SIGNAL(fileChanged(const QString &)),this,→ SLOT(handFileChanged(const QString &)));
}
 
void MainWindow::handFileChanged(const QString &path)
{
      QString dlgTitle="information";
      QString str="文件改变:"+path;
      QMessageBox::information(this, dlgTitle, str,QMessageBox::Yes);
}

void MainWindow::handDirChanged(const QString &path)
{
     QString dlgTitle="information";
     QString str="文件夹改变:"+path;
     QMessageBox::information(this, dlgTitle, str,QMessageBox::Yes);
}

6,QTemporaryFile和QTemporaryDir和QCoreApplication

(1)QTemporaryFile用于安全地创建唯一的临时文件,该文件本身是通过调用open()创建的。

临时文件的名称保证是唯一的(保证您不会覆盖现有文件),并且在销毁QTemporaryFile对象时将删除该文件。
临时文件的打开方式为 QIODevice::ReadWrite
这样可避免将数据存储在临时文件中的应用程序破坏数据。

(2)使用QTemporaryFile创建临时文件非常简单,可以使用静态函数QTemporary-File::createTemplateFile() 创建文件,会返回一个QTemporaryFile对象。可以像普通文件一样进行读写操作,使用open() 打开,当不再需要使用临时文件时,调用close()方法关闭文件即可。
需要注意的是,临时文件在程序结束后会被自动删除(QTemporaryFile 对象销毁时),因此不需
要手动删除临时文件。如果需要手动控制临时文件的删除时间,可以使用QFile::setAutoRemove()
方法设置是否自动删除文件。

(3)QCoreApplication是无 UI 应用程序提供事件循环的类,是所有应用程序的基类。对于GUI程序,应该用QGuiApplication,而对于采用了Qt Widget模块的程序,应该使用QApplication,例如:我们使用 Qt Creator 创建的Qt Widget Application都是基于QApplication。它们之间的继承关系是:QCoreApplication -> QGuiApplicatioin -> QApplication。QCoreApplication 提供了一些有用的静态函数,可以用来获取应用程序的名称,启动路径等信息。继承于此类的子类,也可以使用QCoreApplication的相关方法,如applicationDirPath() 获取可执行应用文件所在目录;applicationFilePath() 获取可执行应用文件路径。

 // 默认文件路径和名称
  m_datastreampath = qApp->applicationDirPath()+"/datastream.dat";
  m_textstreampath = qApp->applicationDirPath()+"/textstream.txt";
  m_filepath = qApp->applicationDirPath()+"/document";

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/482891.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器学习——决策树剪枝算法

机器学习——决策树剪枝算法 决策树是一种常用的机器学习模型&#xff0c;它能够根据数据特征的不同进行分类或回归。在决策树的构建过程中&#xff0c;剪枝算法是为了防止过拟合&#xff0c;提高模型的泛化能力而提出的重要技术。本篇博客将介绍剪枝处理的概念、预剪枝和后剪…

代码随想录算法训练营第二十四天| 回溯算法理论基础、LeetCode77. 组合

# 回溯算法理论基础 # Backtracking 理论基础视频讲解&#xff1a;带你学透回溯算法&#xff08;理论篇&#xff09;| 回溯法精讲&#xff01;_哔哩哔哩_bilibili #LeetCode 77. Combinations #LeetCode 77. 视频讲解&#xff1a;带你学透回溯算法-组合问题&#xff08;对应力…

力扣爆刷第103天之CodeTop100五连刷1-5

力扣爆刷第103天之CodeTop100五连刷1-5 文章目录 力扣爆刷第103天之CodeTop100五连刷1-5一、3. 无重复字符的最长子串二、206. 反转链表三、146. LRU 缓存四、215. 数组中的第K个最大元素五、25. K 个一组翻转链表 一、3. 无重复字符的最长子串 题目链接&#xff1a;https://l…

Oracle数据库如果出现乱码,需要查看是否时字符集不一致导致乱码,这样解决

1、如果出现乱码&#xff0c;需要查看是否时字符集不一致导致乱码 以修改为ZHS16GBK字符集为例&#xff0c;具体字符集需要sql查询。 Oracle查看字符集 SELECT * FROM NLS_DATABASE_PARAMETERS p where p.PARAMETERNLS_CHARACTERSET; SELECT USERENV(language) FROM DUAL; 1.…

谷歌seo营销服务有哪些服务?

以我们举例&#xff0c;如果你在做B2B外贸建站&#xff0c;这里有全套保姆式托管服务&#xff0c;让你既省心又省力&#xff0c;七天就能搞定网站建设&#xff0c;快速上线&#xff0c;再来就是谷歌白帽SEO&#xff0c;我们这边强调的是纯白帽操作&#xff0c;专注于高质量的原…

Cmake和opencv环境安装

1 Cmake下载及安装 Download CMake 根据需要下载&#xff0c;历史版本下载方法如下 CMake 的版本号中的后缀 "rc1" 和 "rc2" 表示 Release Candidate 1 和 Release Candidate 2&#xff0c;它们都是候选版本&#xff0c;用于测试新功能和修复 bug。通常情…

uni-app里面如何使用图标

目录 一、导入 1.在官方&#xff08;iconfont-阿里巴巴矢量图标库&#xff09;选择自己想要的图标&#xff0c;加入购物车 2. 在点击购物车下载代码 3.解压文件夹 并更改名字 4.将文件夹&#xff08;iconfont&#xff09;整个放到项目中的static中 5.修改iconfont.css文件…

ctfshow-web入门-反序列化

web254 先看题 <?php/* # -*- coding: utf-8 -*- # Author: h1xa # Date: 2020-12-02 17:44:47 # Last Modified by: h1xa # Last Modified time: 2020-12-02 19:29:02 # email: h1xactfer.com # link: https://ctfer.com*/error_reporting(0); highlight_file(__FIL…

系统架构设计-构建系统应用

1. 系统架构目标与设计原则 在设计系统架构时&#xff0c;我们的目标是确保系统具有以下特点&#xff1a; 可靠性&#xff1a;系统能够持续稳定运行&#xff0c;保证业务可用性。可伸缩性&#xff1a;系统能够根据负载变化自动扩展或收缩&#xff0c;以应对不同的流量需求。容…

string类的详细模拟实现

string类的模拟实现 文章目录 string类的模拟实现前言1. 类的框架设计2. 构造函数与析构函数3. 拷贝构造与重载赋值运算符函数4. 运算符重载5. 成员函数6. 迭代器的实现7. 非成员函数8. 单元测试总结 前言 ​ 在现代编程中&#xff0c;字符串处理是每个程序员都会遇到的基本任…

Web核心简介

简介 web&#xff1a;全球广域网&#xff0c;也称万维网(www)&#xff0c;能够通过浏览器访问的网站 JavaWeb&#xff1a;是用Java技术来解决相关web互联网领域的技术栈 JavaWeb技术栈 B/S架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器架构模式&#xff0c;它的…

精神暴力的来源与解药

导致人生病的&#xff0c;不仅是病毒或细菌&#xff0c;也有精神暴力。与病毒破坏物理肌体、摧毁生命不同&#xff0c;精神暴力是让人们在过度的自我狂热中燃尽自我、而毁灭自身的。 21世纪以来&#xff0c;精神方面的疾病越来越多&#xff0c;为什么这样呢&#xff1f;大的背景…

【C语言进阶篇】动态内存管理

【C语言进阶篇】动态内存管理 &#x1f308;个人主页&#xff1a;开敲 &#x1f525;所属专栏&#xff1a;C语言 &#x1f33c;文章目录&#x1f33c; 1. 为什么要有动态内存分配 2.动态内存开辟和释放函数 2.1 动态内存释放函数 2.1.1 free函数 2.2 动态内存开辟函数 2.2.1 …

HTML元素语义化补充之css函数(三)

文章目录 CSS中的函数css函数–varcss函数–calccss函数–blurcss函数–gradientlinear-gradient的使用 CSS中的函数 ◼ 在前面我们有使用过很多个CSS函数: 比如rgb/rgba/translate/rotate/scale等; CSS函数通常可以帮助我们更加灵活的来编写样式的值&#xff1b; ◼ 下面有几…

自动驾驶轨迹规划之时空语义走廊(一)

欢迎大家关注我的B站&#xff1a; 偷吃薯片的Zheng同学的个人空间-偷吃薯片的Zheng同学个人主页-哔哩哔哩视频 (bilibili.com) 目录 1.摘要 2.系统架构 3.MPDM 4.时空语义走廊 ​4.1 种子生成 4.2 具有语义边界的cube inflation ​4.3 立方体松弛 本文解析了丁文超老师…

【机器学习300问】47、如何计算AUC?

一、AUC是什么&#xff1f; &#xff08;1&#xff09;文绉绉的定义 AUCArea Under the Curve中文直译叫“曲线下面积”&#xff0c;AUC名字里面的Curve曲线指的就是ROC曲线&#xff0c;关于ROC曲线的相关知识我已经在之前的文章中详细说过了&#xff0c;有需要的友友可以点击…

阿里云服务器(Ubuntu22)上的MySQL8数据库下载,安装和远程连接

最近阿里云centos主机到期了改为使用Ubuntu操作系统&#xff0c;在上面安装mysql并远程连接出现了一系列问题并解决。 之前在centos系统上下载mysql8的教程如下&#xff1a; 阿里云服务器&#xff08;centos7&#xff09;上的MySQL8数据库下载&#xff0c;安装和远程连接 主机操…

10、chrome拓展程序的实现

一、拓展程序的实现 拓展程序项目的构成 和前端项目一样&#xff0c;拓展程序也是有Html、CSS、JS文件实现的&#xff0c;现在看来它就是一个静态的前端页面。但是不同的是&#xff0c;拓展程序中还需要额外的一个清单文件&#xff0c;就是manifest.json&#xff0c;清单文件可…

Fabric Measurement

Fabric Measurement 布料测量

stm32平衡车

目录 一.所需材料 二.PID算法&#xff08;简单说明&#xff09; 直立环 速度环 串级PID 三.使用到的外设 1.定时器输出比较-PWM 2.定时器编码器模式 3.编码器读取速度 4.电机驱动函数 5.外部中断 四、小车 调试 一.所需材料 1.陀螺仪MPU6050--读取三轴的加速度…