Qt文件操作

devtools/2025/2/4 16:18:43/

目录

一、文件操作相关类

1.QFile

2.QFileInfo

3.QTextStream

4.QDataStream

5.QDir

6.QFileSystemWatcher

7.QTemporaryFile

二、文件操作示例

1.文本文件操作

2.目录操作

3.二进制文件操作


一、文件操作相关类

1.QFile

QFile类用于文件的创建、读写、复制、删除等操作,可以实现文本文件和二进制文件的读写。

常用函数:

  1. open():打开文件,参数决定文件的打开方式,如只读、只写、读写、追加等。
  2. close():关闭文件。
  3. readLine():读取一行。
  4. readAll():读取所有内容。
  5. write():向文件中写入数据。
  6. atEnd():判断是否到达文件尾。
  7. seek():将文件指针定位到指定位置处。
  8. pos():获取文件指针当前位置。

      

2.QFileInfo

QFileInfo类用于提供文件信息,包括文件的名称、在文件系统中的路径、文件的访问权限等,还可以获取文件的大小和最近一次修改的时间。

常用函数:

  1. exists():判断文件是否存在。
  2. isSymLink():判断文件是否是符号链接。
  3. symLinkTarget():如果文件是符号链接,返回原始文件的完整路径文件名,否则返回空字符串。
  4. size():获取文件大小。
  5. lastModified():获取文件最后修改时间。
  6. lastRead():获取文件最后读取时间。
  7. permissions():获取文件权限。

     

3.QTextStream

QTextStream类用于对数据进行文本格式的读/写操作,可以操作QIODevice、QByteArray和QString。

  • 写入操作:使用流插入运算符<<可以方便地将各种数据类型写入到文本流中,如整数、浮点数、字符串等。
  • 读取操作:使用流提取运算符>>可以从文本流中读取各种数据类型。还提供了readLine()、readAll()等函数用于按行或一次性读取所有文本内容。
  • 格式设置:可以通过setFieldWidth()、setPadChar()等函数设置字段宽度和填充字符;通过setFieldAlignment()设置字段对齐方式;通过setRealNumberNotation()和setRealNumberPrecision()设置实数的表示形式和精度等。

常用函数:

  1. operator>>():从流中读取数据。
  2. operator<<():向流中写入数据。
  3. readLine():读取一行文本。
  4. readAll():读取全部文本。

     

    4.QDataStream

    QDataStream类用于对数据进行二进制格式的读写操作,只能操作QIODevice或QByteArray。

    • 写入操作:使用流插入运算符<<将各种数据类型以二进制形式写入到数据流中,支持的Qt类型包括QBrush、QColor、QDateTime、QFont、QPixmap、QString、QVariant等,还包括QList、QVector、QSet、QMap等容器类型。
    • 读取操作:使用流提取运算符>>从数据流中读取数据,读取数据类型的顺序应与写入时的一致。
    • 版本控制:可以通过setVersion()函数设置版本号,以确保在读取和写入复杂类型时使用相同的版本,保证数据的兼容性。
    • 字节序设置:可以通过setByteOrder()函数设置字节序,默认是大端字节序。
    • 原始数据读写:提供了readRawData()和writeRawData()函数用于直接读写原始的未编码二进制数据,还提供了readBytes()和writeBytes()函数,先读取或写入一个quint32值表示数据长度,然后再读取或写入相应字节的数据。

    常用函数:

    1. operator>>():从流中读取二进制数据。
    2. operator<<():向流中写入二进制数据。
    3. readRawData():将数据从流中读取到预先分配的缓冲区中。
    4. writeRawData():将数据写入到流中。

        

    5.QDir

    QDir类用于操纵路径名和底层的文件系统,如创建文件夹、遍历文件夹等。

    常用函数:

    1. exists():判断目录是否存在。
    2. mkdir():创建一个新的目录。
    3. rmdir():删除一个空目录。
    4. entryList():返回目录中的文件和目录列表。
    5. cd():切换当前目录。
    6. cdUp():切换到上级目录。
    7. absolutePath():获取目录的绝对路径。
    8. canonicalPath():获取目录的规范路径。

        

    6.QFileSystemWatcher

    QFileSystemWatcher类通过观察指定路径的列表来监视文件系统中文件和目录的更改,当文件已被修改、重命名或从磁盘中删除就会发送相应信号。

    常用函数:

    1. addPath():添加一个监视路径。
    2. removePath():移除一个监视路径。
    3. directories():返回正在监视的目录列表。
    4. files():返回正在监视的文件列表。
    5. directoryChanged:当监视的目录发生变化时发射此信号。
    6. fileChanged:当监视的文件发生变化时发射此信号。

         

    7.QTemporaryFile

    QTemporaryFile类用于创建临时文件,临时文件在应用程序运行时用于暂时存储数据,在不需要时通常会自动删除。

    常用函数:

    1. open():打开临时文件以进行读取和写入操作。
    2. write():将数据写入临时文件。
    3. readAll():一次性读取整个临时文件的内容。
    4. fileName():获取临时文件的路径。
    5. size():获取临时文件的大小。
    6. autoRemove():设置临时文件在销毁时是否自动删除。

          


         

    二、文件操作示例

    1.文本文件操作

        //获取应用程序当前目录的绝对路径QString cur_path = QCoreApplication::applicationDirPath();//选择文件QString cur_name = QFileDialog::getOpenFileName(this, "Open File",cur_path,"txt(*.txt);;all(*.*);;images(*.png *.jpg)");if(cur_name.isEmpty()) return;//打开文件QFile cur_file(cur_name);if(!cur_file.open(QIODevice::ReadOnly|QIODevice::Text)) return;//读文件QTextStream cur_stream(&cur_file);//全部读取QString str = cur_stream.readAll();qDebug()<<str;//按行读取while(!cur_stream.atEnd()){QString str = cur_stream.readLine();qDebug()<<str;}//创建一个新文件QFile new_file("D:/test01.txt");if(!new_file.open(QIODevice::WriteOnly)) return;QTextStream new_stream(&new_file);//写文件new_stream<<"Hello World!";new_file.close();//删除文件if(new_file.exists())new_file.remove();//复制文件两种方式if(!QFile::copy(cur_name,new_file.fileName())) return;//if(!cur_file.copy(new_file.fileName())) return;//文件信息QFileInfo info(cur_name);if(!info.exists()) return;qDebug() << "文件名称:" << info.fileName();qDebug() << "文件路径:" << info.filePath();qDebug() << "文件大小:" << info.size() << "bytes";qDebug() << "文件最后读取时间:"<< info.lastRead().toString("yyyy-MM-dd hh:mm:ss");qDebug() << "文件最后修改时间:"<< info.lastModified().toString("yyyy-MM-dd hh:mm:ss");//关闭文件cur_file.close();

           

    2.目录操作

        //遍历目录QDir dir_traverse("D:/");QStringList dir_list = dir_traverse.entryList(QDir::NoDotAndDotDot|QDir::AllEntries);qDebug()<<"D:";for(int i=0;i<dir_list.size();i++)qDebug()<<dir_list[i];//创建目录QDir new_dir;QString new_path = "D:/new_directory";if(!new_dir.exists(new_path))if(!new_dir.mkdir(new_path))qDebug()<<"create error";//重命名目录QDir rename_dir;QString old_name =  "D:/new_directory";QString new_name =  "D:/renamed_directory";if(rename_dir.exists(old_name))if(!rename_dir.rename(old_name,new_name))qDebug()<<"rename error";//删除目录QDir delete_dir;QString delete_path = "D:/renamed_directory";if(delete_dir.exists(delete_path))if(!delete_dir.rmdir(delete_path))qDebug()<<"delete error";//获取当前目录QString current_path = QDir::currentPath();qDebug()<<"current directory: "<<current_path;//切换目录QDir change_dir;QString change_path = "D:/";if(change_dir.cd(change_path))qDebug()<<"current directory: "<<change_path;

           

    3.二进制文件操作

    写入二进制文件:

    class Person{
    public:QString name;qint16 age;
    };//重载<<运算符
    QDataStream& operator<<(QDataStream &out, const Person &person){out<<person.name<<person.age;return out;
    }QFile file("D:/test02.txt");
    if(!file.open(QIODevice::WriteOnly)) return;QDataStream out(&file);
    out.setVersion(QDataStream::Qt_6_0);int x1 = 12;
    double x2 = 5.55;
    QString x3 = "hello";Person p1 = {"Alice",25};
    Person p2 = {"Bob",23};out<<x1<<x2<<x3<<p1<<p2;file.close();

    读取二进制文件:

    class Person{
    public:QString name;qint16 age;
    };//重载>>运算符
    QDataStream& operator>>(QDataStream &in, Person &person){in>>person.name>>person.age;return in;
    }QFile file("D:/test02.txt");
    if(!file.open(QIODevice::ReadOnly)) return;QDataStream in(&file);
    in.setVersion(QDataStream::Qt_6_0);int x1;
    double x2;
    QString x3;Person p1;
    Person p2;in>>x1>>x2>>x3>>p1>>p2;qDebug()<<x1<<x2<<x3;
    qDebug()<<p1.name<<p1.age;
    qDebug()<<p2.name<<p2.age;file.close();

         


    http://www.ppmy.cn/devtools/156052.html

    相关文章

    Python面试宝典13 | Python 变量作用域,从入门到精通

    今天&#xff0c;我们来深入探讨一下 Python 中一个非常重要的概念——变量作用域。理解变量作用域对于编写清晰、可维护、无 bug 的代码至关重要。 什么是变量作用域&#xff1f; 简单来说&#xff0c;变量作用域就是指一个变量在程序中可以被访问的范围。Python 中有四种作…

    基于微信小程序的酒店管理系统设计与实现(源码+数据库+文档)

    酒店管理小程序目录 目录 基于微信小程序的酒店管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员模块的实现 (1) 用户信息管理 (2) 酒店管理员管理 (3) 房间信息管理 2、小程序序会员模块的实现 &#xff08;1&#xff09;系统首页 &#xff…

    JVM-运行时数据区

    JVM的组成 运行时数据区-总览 Java虚拟机在运行Java程序过程中管理的内存区域&#xff0c;称之为运行时数据区。 《Java虚拟机规范》中规定了每一部分的作用 运行时数据区-应用场景 Java的内存分成哪几部分&#xff1f; Java内存中哪些部分会内存溢出&#xff1f; JDK7 和J…

    如何解决云台重力补偿?

    如何解决云台重力补偿? 最近在调试步兵云台的时候,由于枪管、图传、摄像头等重力的原因,pitch轴的参数尤其难以调整,又不想抬升和降低使用两套不同的参数,所以使用了重力补偿,效果也是比较理想的,于是整理为一篇文章记录一下 一、问题根源:枪管重力在“搞事情” 想象…

    SpringBoot 配置文件

    目录 一. 配置文件相关概念 二. 配置文件快速上手 1. 配置文件的格式 2. properties 配置文件 (1) properties 基本语法 (2) 读取配置文件内容 (3) properties 缺点分析 3. yml配置文件 (1) yml 基本语法 (2) 读取配置文件内容 (3) yml 配置对象 (4) yml 配置集合 …

    【大数据技术】教程03:本机PyCharm远程连接虚拟机Python

    本机PyCharm远程连接虚拟机Python 注意:本文需要使用PyCharm专业版。 pycharm-professional-2024.1.4VMware Workstation Pro 16CentOS-Stream-10-latest-x86_64-dvd1.iso写在前面 本文主要介绍如何使用本地PyCharm远程连接虚拟机,运行Python脚本,提高编程效率。 注意: …

    Kafka流式计算架构

    引言 Kafka 凭借其卓越的架构设计&#xff0c;具备极为高效的流式计算能力&#xff0c;在海量数据环境下&#xff0c;依然能够以惊人的速度实现消息的高性能消费&#xff0c;轻松应对高并发、低延迟的严苛业务需求。无论是实时数据处理、复杂事件分析&#xff0c;还是大规模数…

    NLP深度学习 DAY5:Sequence-to-sequence 模型详解

    Seq2Seq&#xff08;Sequence-to-Sequence&#xff09;模型是一种用于处理输入和输出均为序列任务的深度学习模型。它最初被设计用于机器翻译&#xff0c;但后来广泛应用于其他任务&#xff0c;如文本摘要、对话系统、语音识别、问答系统等。 核心思想 Seq2Seq 模型的目标是将…