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

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

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

相关文章

供应链攻击揭秘:识别、防范与应对

供应链攻击是网络安全领域的一种新兴威胁&#xff0c;它利用供应链中的漏洞对目标进行攻击。本文将介绍供应链攻击的概念、类型、危害&#xff0c;并通过具体案例阐述其影响&#xff0c;同时探讨如何防范供应链攻击&#xff0c;以提高人们对供应链攻击的认识和防范意识。 一、引…

3、Jenkins持续集成-Jenkins安装和插件管理

文章目录 一、Jenkins安装1. 安装JDK2. 获取jenkins安装包3. 安装包上传到服务器&#xff0c;进行安装4. 修改Jenkins配置&#xff08;1&#xff09;低版本Jenkins的rpm包&#xff08;2&#xff09;高版本Jenkins的rpm包 5. 启动Jenkins6. 打开浏览器访问7. 获取并输入admin账户…

【漏洞复现】netgear路由器 boarddataww 存在RCE漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

HTML发展史

为什么要讲 HTML 发展史呢&#xff1f; 唐太宗告诉我们: 以铜为镜&#xff0c;可以正衣冠&#xff1b;以史为镜&#xff0c;可以知兴替&#xff1b;以人为镜&#xff0c;可以明得失。 那了解了 HTML 的发展史&#xff0c;可以知道什么呢&#xff1f; 答案是兼容 国内在 淘宝…

FDM3D打印系列——美纹纸遮挡喷漆

大家好&#xff0c;我是阿赵。   自从上次尝试了水补土和喷漆&#xff0c;发现效果不错之后&#xff0c;我就接着进行第二次的尝试了。   这次打印的模型是这个拳皇里面的卢卡尔&#xff0c;别看拍照好像很高大&#xff0c;其实这个模型很小的&#xff0c;只有10cm左右的高…

C#获取HTML源码

C#获取HTML源码 2024年03月23日记录 以前的那个从网上找到的方法, 在一些网站上用不了&#xff0c;如17K&#xff0c;取出来的是乱码&#xff0c;要么就是一坨JS&#xff0c;好像是用JS又重新加载了什么的 using System; using System.Collections.Generic; using System.We…

面试 Java 基础八股文十问十答第二十期

面试 Java 基础八股文十问十答第二十期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01;关注专栏后就能收到持续更新&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1&#xff09;HashMap 和 Concurre…

打造全网最全Doris面试题(100个问题2万字)

在大数据领域,Doris作为一款高性能、易扩展的MPP(Massively Parallel Processing)分析数据库,受到了越来越多企业的青睐。作为一名大数据架构师,了解Doris的核心特性和面试题是至关重要的。本文将为您提供一系列Doris面试题的参考答案,帮助您在面试中游刃有余,同时也为您…

PySide6-YOLO8目标检测、追踪可视化界面

目录 项目地址实现效果DetectTrack 项目地址 https://github.com/zhengjie9510/pyside-yolo 实现效果 Detect Track

windows安装ssh

一、下载ssh https://github.com/PowerShell/Win32-OpenSSH/releases/download/v8.1.0.0p1-Beta/OpenSSH-Win64.zip 二、安装ssh 解压到C:\Program Files\OpenSSH-Win64 配置环境变量 把 C:\Program Files\OpenSSH-Win64 加到path环境变量里面 C:\Program Files\OpenSSH-Win64&…

JDK1.8新特性——Stream流方法引用

文章目录 Stream流如何获取流水线Stream流中间方法Stream终结方法 方法引用引用静态方法引用成员方法引用构造方法类名引用成员方法引用数组构造方法 Stream流 Stream流是JDK8中提供的一种新特性 Stream流的使用步骤&#xff1a; 先得到Stream流&#xff0c;把数据放到流中使…

七、大模型-什么是Fine-tuning

好文推荐 推荐一篇比较透彻的介绍 对于深度学习模型中的 Fine-tuning&#xff08;微调&#xff09;操作&#xff0c;以下是详细介绍和原理说明&#xff1a; 什么是 Fine-tuning&#xff08;微调&#xff09;&#xff1f; Fine-tuning 是指在一个已经训练好的模型基础上&am…

Arcgis 导入经纬度坐标、导出经纬度坐标

目录 一、导入经纬度坐标 1、在excel中准备好经纬度坐标的数据表 2、将数据放入Acrgis的工作路径 3、在arcgis中添加数据 4、显示经纬度坐标点 5、导出为shp矢量文件 二、根据shp的经纬度坐标点导出成经纬度坐标 1、右键选择打开属性表 2、在属性表的菜单下拉栏里找到…

三、阅读器的开发--1、项目准备

1、项目准备 1.1、项目搭建 我用的脚手架是vue cli 5.0的&#xff0c;通过vue create 项目名称来创建的项目 上下箭头选的是最后那个&#xff0c;是指手动配置&#xff0c;然后回车 空格选中下面这些&#xff0c;然后回车 下图最后那个指我们所有的配置在哪里配置&#xff0…

c++ 线程池/Github 开源项目源码分析(progschj/ThreadPool)

c 线程池/Github 开源项目源码分析&#xff08;progschj/ThreadPool&#xff09; 前言[ThreadPool 项目地址](https://github.com/progschj/ThreadPool)项目源码&#xff1a;基本用法类成员变量类成员函数构造函数的签名创建线程线程默认的任务向任务队列中添加一个任务析构函数…

open images v7的600类别名称

英文&#xff1a; 0: Accordion1: Adhesive tape2: Aircraft3: Airplane4: Alarm clock5: Alpaca6: Ambulance7: Animal8: Ant9: Antelope10: Apple11: Armadillo12: Artichoke13: Auto part14: Axe15: Backpack16: Bagel17: Baked goods18: Balance beam19: Ball20: Balloon21…

【Rust】Shared-State Concurrency

Shared-State Concurrency channel类似于single ownership. 而shared memory类似与multiple ownership. multiple ownership是难于管理的. smarter pointer也是multiple ownership的. Rust的type system和ownership rules帮助实现正确的multiple ownership管理。 Using Mute…

百度智能云+SpringBoot=AI对话【人工智能】

百度智能云SpringBootAI对话【人工智能】 前言版权推荐百度智能云SpringBootAI对话【人工智能】效果演示登录AI对话 项目结构后端开发pom和propertiessql_table和entitydao和mapperservice和implconfig和utilLoginController和ChatController 前端开发css和jslogin.html和chat.…

MySQL 8.0-索引- 不可见索引(invisible indexes)

概述 MySQL 8.0引入了不可见索引(invisible index)&#xff0c;这个在实际工作用还是用的到的&#xff0c;我觉得可以了解下。 在介绍不可见索引之前&#xff0c;我先来看下invisible index是个什么或者定义。 我们依然使用拆开来看&#xff0c;然后再把拆出来的词放到MySQL…

kali安装docker(亲测有效)

第一步&#xff1a;添加Docker官方的GPG密钥 curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add - 第二步&#xff1a; 第二步更新源 echo deb https://download.docker.com/linux/debian stretch stable> /etc/apt/sources.list.d/docker.list…