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

news2024/11/19 18:39:26

访问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";

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度学习十大算法之长短时记忆网络(LSTM)

一、长短时记忆网络&#xff08;LSTM&#xff09;的基本概念 长短时记忆网络&#xff08;LSTM&#xff09;是一种特殊类型的循环神经网络&#xff08;RNN&#xff09;&#xff0c;主要用于处理和预测序列数据的任务。LSTM由Hochreiter和Schmidhuber于1997年提出&#xff0c;其…

腾讯云GPU云服务器_并行计算_弹性计算_AI_深度学习

腾讯云GPU服务器是提供GPU算力的弹性计算服务&#xff0c;腾讯云GPU服务器具有超强的并行计算能力&#xff0c;可用于深度学习训练、科学计算、图形图像处理、视频编解码等场景&#xff0c;腾讯云百科txybk.com整理腾讯云GPU服务器租用价格表、GPU实例优势、GPU解决方案、GPU软…

【Word自动化办公】使用python-docx对Word进行操作

目录 一、环境安装 二、文档各组成结构获取 2.1 组成结构讲解 2.2 段落run对象的切分标准 三、获取整篇文档内容 四、写入指定样式的数据 4.1 通过add_paragraph与add_run参数添加样式 4.2 单独设置文本样式 五、添加标题 六、换行符&换页符 七、添加图片数据 …

pytest之yaml格式测试用例读写封装

pytest之yaml格式测试用例读写封装 pytest之parametrize&#xff08;&#xff09;实现数据驱动YAML格式测试用例读/写/清除/封装结构类型Maps类型数组类型 pytestparametrizeyamltest_api.pyget_token.yaml pytest之parametrize&#xff08;&#xff09;实现数据驱动 pytest.ma…

文件上传二—WEB攻防-PHP应用文件上传中间件CVE解析第三方编辑器已知CMS漏洞

演示案例&#xff1a; PHP-中间件-上传相关-Apache&NginxPHP-编辑器-上传相关-第三方处理引用PHP-CMS源码-上传相关-已知识别到利用 #PHP-中间件-上传相关-Apache&Nginx 复现漏洞环境&#xff1a;vulhub &#xff08;部署搭建看打包视频&#xff09; 由于PHP搭建常用中…

【机器学习300问】46、什么是ROC曲线?

一、二分类器的常用评估指标有哪些&#xff1f; 二分类器是机器学习领域中最常见的也是应用最广泛的分类器。评价二分类器的指标也很多&#xff0c;下面列出几个我之前重点写文章介绍过的指标。 &#xff08;1&#xff09;准确率&#xff08;Accuracy&#xff09; 定义为分类正…

Centos上安装Harbor并使用

harbor的安装与使用 Harbor介绍安装前的准备工作为Harbor自签发证书安装Harbor安装docker开启包转发功能和修改内核参数安装harbor扩展 Harbor 图像化界面使用说明测试使用harbor私有镜像仓库从harbor仓库下载镜像 Harbor介绍 容器应用的开发和运行离不开可靠的 镜像管理&…

STM32 CAN的工作模式

STM32 CAN的工作模式 正常模式 正常模式下就是一个正常的CAN节点&#xff0c;可以向总线发送数据和接收数据。 静默模式 静默模式下&#xff0c;它自己的输出端的逻辑0数据会直接传输到它自己的输入端&#xff0c;逻辑1可以被发送到总线&#xff0c;所以它不能向总线发送显性…

linux centos 安装jenkins,并构建spring boot项目

首先安装jenkins&#xff0c;使用war包安装&#xff0c;比较简单&#xff0c;注意看下载的版本需要的JDK版本&#xff0c;官网下载https://www.jenkins.io/download/ 把下载好的war包放到服务器上&#xff0c;然后运行&#xff0c;注意8080端口的放行 # 前台运行并指定端口 ja…

智能优化算法 | Matlab实现PID搜索算法(PSA)(内含完整源码)

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 智能优化算法 | Matlab实现PID搜索算法(PSA)(内含完整源码) 源码设计 %%%% clc clear close all %%%% Fun_name=F12; % Fun_name of

后端Jwt实现Token编码、解码以及axios的request请求头的Token传输方式

目录 一、什么是JWT&#xff1a; 二、Jwt的使用&#xff1a; 第一步&#xff1a;引入依赖&#xff1a; 第二步&#xff1a;配置拦截器&#xff1a;JwtInterceptor.java&#xff1a; 其中异常文件ServiceException配置如下&#xff1a; 全局异常文件GlobalException.java文…

海康威视-AIOT的业务转型

海康威视的转型和定位为智能物联网&#xff08;AIoT&#xff09;解决方案和大数据服务的提供商。 公司不仅仅聚焦于其核心的视频监控业务&#xff0c;而且正在积极拓展到新的技术领域和市场。通过专注于物联感知、人工智能、大数据等技术的创新&#xff0c;对未来技术发展方向的…

增强现实(AR)在广告中的力量

The Power of AR in Advertising 写在前面 增强现实&#xff08;AR -Augmented Reality&#xff09;是指借助软件、应用程序和智能手机、平板电脑或耳机等设备&#xff0c;为日常生活添加视觉和音频元素的技术。如今&#xff0c;品牌和广告商可以在营销活动中使用AR&#xff0…

车道线检测论文:《Ultra Fast Structure-aware Deep Lane Detection》

该论文标题为《Ultra Fast Structure-aware Deep Lane Detection》&#xff0c;作者是浙江大学计算机科学与技术学院的Zequn Qin、Huanyu Wang和Xi Li。论文提出了一种新颖的、简单而有效的车道检测方法&#xff0c;旨在解决具有挑战性场景下的车道检测问题&#xff0c;并实现极…

CentOS系统部署YesPlayMusic播放器并实现公网访问本地音乐资源

文章目录 1. 安装Docker2. 本地安装部署YesPlayMusic3. 安装cpolar内网穿透4. 固定YesPlayMusic公网地址 本篇文章讲解如何使用Docker搭建YesPlayMusic网易云音乐播放器&#xff0c;并且结合cpolar内网穿透实现公网访问音乐播放器。 YesPlayMusic是一款优秀的个人音乐播放器&am…

idea使用token方式登录GitHub

总体上分为两大步&#xff1a;1.GitHub生成token。2.idea配置token登录GitHub。 注&#xff1a;idea配置GitHub的前提是本地已经安装了git程序。 一、GitHub生成token 1.登录GitHub 2.进入token创建页面&#xff08;右上角点击头像–>settings–>页面向下滚动左侧菜单栏…

网络上常见的环路指的是什么

人类的创造力与破坏力同样强大"。 网路互通&#xff0c;同样也衍生出纷繁复杂的路由协议和各种因特网服务&#xff0c;以及"网络安全"这个庞大的领域。 这也是为什么说当今所有的网络通讯流量中&#xff0c;80%的资源都被浪费&#xff0c;只有20%被用以有效数…

网络安全实训Day8

写在前面 网络工程终于讲完了。这星期到了网络安全技术部分。 网络安全实训-网络安全技术 网络安全概述 信息安全&#xff1a;所有保障计算机硬件、系统、软件、数据不因有意或无意的行为导致的服务中断、数据损坏或丢失等安全事件的保障技术 网络安全&#xff1a;基于计算机…

CSS的特殊技巧

1.精灵图 使用精灵图核心总结&#xff1a; 1. 精灵图主要针对于小的背景图片使用。 2. 主要借助于背景位置来实现--- background-position 。 3. 一般情况下精灵图都是负值。&#xff08;千万注意网页中的坐标&#xff1a; x轴右边走是正值&#xff0c;左边走是负值&#xf…

Unity 中 苹果眼镜开发入口

1. 文档介绍了Unity对Apple新操作系统visionOS的支持。 2. Unity提供了完善的文档、模板和支持,帮助开发者快速为visionOS开发应用。 3. Unity的跨平台框架AR Foundation和XR Interaction Toolkit可以帮助现有移动和XR应用无缝迁移到visionOS。 4. 在visionOS上,可以利用Uni…