Qt文件操作

server/2025/2/4 10:22:39/

目录

一、文件操作相关类

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/server/164861.html

    相关文章

    Spring Boot是什么及其优点

    简介 Spring Boot是基于Spring框架开发的全新框架&#xff0c;其设计目的是简化Spring应用的初始化搭建和开发过程。 Spring Boot整合了许多框架和第三方库配置&#xff0c;几乎可以达到“开箱即用”。 优点 可快速构建独立的Spring应用。 直接嵌入Tomcat、Jetty和Underto…

    Qt 5.14.2 学习记录 —— 이십일 Qt网络和音频

    文章目录 1、UDP带有界面的Udp服务器&#xff08;回显服务器&#xff09; 2、TCP回显服务器 3、HTTP客户端4、音频 和Linux的网络一样&#xff0c;Qt封装了Linux的网络API&#xff0c;即Socket API。网络编程是在应用层写&#xff0c;需要传输层支持&#xff0c;传输层有UDP和T…

    第四章:玄丹-React商品管理实战

    https://ant-design.antgroup.com/components/table-cn 在这里找到我们的 Table 表格,来完成我们的商品功能实战,下面我们会学到 表格类组件的渲染表格函数组件的渲染图片上传组件弹窗组件按钮组件axios 工具的封装分页功能的实现商品管理基础表格 import React from react;…

    Immutable设计 SimpleDateFormat DateTimeFormatter

    专栏系列文章地址&#xff1a;https://blog.csdn.net/qq_26437925/article/details/145290162 本文目标&#xff1a; 理解不可变设计模式&#xff0c;时间format有线程安全要求的注意使用DateTimeFormatter 目录 ImmutableSimpleDateFormat 非线程安全可以synchronized解决&a…

    wire单总线通信

    概述: 1-Wire技术由美国Dallas Semiconductor公司于1989年首次推出&#xff0c;最初的1-Wire标准主要用于便携数据传输模块&#xff0c;减少了设备之间的连接复杂性。 1-Wire单总线的核心特点 单线通信&#xff1a; 1-Wire协议通过一根信号线实现数据和时钟的双向传输&…

    Linux网络 HTTPS 协议原理

    概念 HTTPS 也是一个应用层协议&#xff0c;不过 是在 HTTP 协议的基础上引入了一个加密层。因为 HTTP的内容是明文传输的&#xff0c;明文数据会经过路由器、wifi 热点、通信服务运营商、代理服务器等多个物理节点&#xff0c;如果信息在传输过程中被劫持&#xff0c;传输的…

    QT+mysql+python 效果:

    # This Python file uses the following encoding: utf-8 import sysfrom PySide6.QtWidgets import QApplication, QWidget,QMessageBox from PySide6.QtGui import QStandardItemModel, QStandardItem # 导入需要的类# Important: # 你需要通过以下指令把 form.ui转为ui…

    Prompt提示词完整案例:让chatGPT成为“书单推荐”的高手

    大家好&#xff0c;我是老六哥&#xff0c;我正在共享使用AI提高工作效率的技巧。欢迎关注我&#xff0c;共同提高使用AI的技能&#xff0c;让AI成功你的个人助理。 许多人可能会跟老六哥一样&#xff0c;有过这样的体验&#xff1a;当我们遇到一个能力出众或对事物有独到见解的…