当前位置: 首页 > ai >正文

【Qt开发】文件

目录

1,QFile

2,文件和目录信息类


1,QFile

        文件的处理除了用C++中的 fstream 外,还可以使用 Qt 专门提供的类QFile。QFile是 Qt 中专门对文件进行处理的类。

        QFile 是专门用于文件操作和文件数据读写的类。它提供了处理本地文件系统中的文件的功能,包括打开、关闭、读取和写入等操作。QFile基本使用如下:

创建 QFile 对象

        可以通过指定文件路径来创建一个 QFile 对象。

QFile file("D/file.txt");

打开文件

        QFile 使用 open 方法以不同的模式打开文件(如只读、只写、读写等)。打开模式由QIODevice::OpenMode 枚举变量定义,其取值如下:

if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {

        // 处理错误...

}

读文件:

        QFile中读文件操作有 read、readLine、readAll 方法。通常读取操作还会结合 QTextStream 来简化读取过程。

// 读取文本文件

void readFileContent(const QString &filePath) {

    QFile file(filePath);

    // 尝试以只读模式打开文件

    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {

        qDebug() << "无法打开文件:" << file.errorString();

        return;

    }

    QTextStream in(&file);

    // readLine读取

    while (!in.atEnd()) {

        QString line = in.readLine();

        qDebug() << "读取到的一行:" << line;

    }

    // 读取文件的所有内容

    QString content = in.readAll();

    qDebug() << "文件内容如下:\n" << content;

    // 关闭文件

    file.close();

}

// 读取二进制文件

// 二进制文件的读取可以不使用QTextStream

void readBinaryFile(const QString &filePath) {

    QFile file(filePath);

    if (!file.open(QIODevice::ReadOnly)) {

        qDebug() << "无法打开文件:" << file.errorString();

        return;

    }

    QByteArray data = file.readAll(); // 读取所有数据

    qDebug() << "文件大小为:" << data.size() << "字节";

    file.close();

}

写文件和关闭文件:

        写文件操作可以直接使用write方法。关闭文件对应close方法。

        这里来模拟实现使用菜单打开文件和保存文件的样例,综合代码测试如下:

MainWindow::MainWindow(QWidget *parent)

    : QMainWindow(parent)

    , ui(new Ui::MainWindow)

{

    ui->setupUi(this);

    this->setWindowTitle("简单的记事本");

    // 获取菜单栏

    QMenuBar* menuBar = this->menuBar();

    // 添加菜单

    QMenu* menu = new QMenu("文件");

    menuBar->addMenu(menu);

    // 添加菜单项

    QAction* action1 = new QAction("打开");

    QAction* action2 = new QAction("保存");

    menu->addAction(action1);

    menu->addAction(action2);

    // 指定一个输入框

    edit = new QPlainTextEdit(this);

    QFont font;

    font.setPixelSize(25);

    edit->setFont(font);

    this->setCentralWidget(edit);

    // 连接QAction的信号槽

    connect(action1, &QAction::triggered, this, &MainWindow::handleAction1);

    connect(action1, &QAction::triggered, this, &MainWindow::handleAction2);

}

MainWindow::~MainWindow()

{

    delete ui;

}

// 打开文件的槽函数

void MainWindow::handleAction1()

{

    // 设置打开文件的对话框,让用户选择打开哪个文件

    QString path = QFileDialog::getOpenFileName(this);

    // 把文件名显示到状态栏里

    QStatusBar* statusBar = this->statusBar();

    statusBar->showMessage(path);

    // 根据用户选择的路径,构造一个QFile对象,并打开文件

    QFile file(path);

    bool ret = file.open(QIODevice::ReadOnly | QIODevice::Text);

    if (!ret) { // 打开文件失败

        statusBar->showMessage(path + " 打开文件失败");

        return;

    }

    // 读取文件

    // 方法一:

    //  QTextStream in(&file);

    // QString text = in.readAll(); // 读取文件的所有内容

    // 方法二:

    QString text = file.readAll(); // QString接收文件的前提是打开的文件是一个文本文件,二进制文件不合适

    // 关闭文件

    file.close();

    // 读取到的内容设置到输入框中

    edit->setPlainText(text);

}

// 保存文件的槽函数

void MainWindow::handleAction2()

{

    // 设置保存文件的对话框

    QString path = QFileDialog::getSaveFileName(this);

    // 在状态栏中显示这个文件名

    QStatusBar* statusBar = this->statusBar();

    statusBar->showMessage(path);

    // 根据用户选择的路径,构造一个QFile对象,并打开文件

    QFile file(path);

    bool ret = file.open(QFile::WriteOnly);

    if (!ret) {

        statusBar->showMessage(path + " 打开文件失败");

        return;

    }

    // 写入文件

    const QString& text = edit->toPlainText();

    file.write(text.toUtf8()); // toUtf8将字符串转换为UTF8编码的二进制数据,返回的是QByteArray一个字节数组

    // 关闭文件

    file.close();

}

2,文件和目录信息类

        QFileInfo 是Qt提供的⼀个用于获取文件和目录信息的类,如获取文件名、文件大小、文件修改日期等。QFileInfo类中提供了很多的方法,常用的有如下:

  • isDir() 检查该文件是否是目录。
  • isExecutable() 检查该文件是否是可执行文件。
  • fileName() 获得文件名。
  • completeBaseName() 获取完整的文件名。
  • suffix() 获取文件后缀名。
  • completeSuffix() 获取完整的文件后缀。
  • size() 获取文件大小。
  • isFile() 判断是否为文件。
  • fileTime() 获取文件创建时间、修改时间、最近访问时间等。

// QFileInfo获取⽂件和⽬录信息

connect(ui->pushButton, &QPushButton::clicked, this, [=](){

    QString path = QFileDialog::getOpenFileName(this, "打开⽂件");

    QFileInfo fileinfo(path);

    // data是QByteArray类用于获取字节数组的底层原始指针(即指向内部数据的const char*指针)的方法

    qDebug() << "⽂件名为:" << fileinfo.fileName().toUtf8().data();

    qDebug() << "后缀名为:" << fileinfo.suffix().toUtf8().data();

    qDebug() << "⽂件⼤⼩为:" << fileinfo.size();

    qDebug() << "⽂件路径为:" << fileinfo.path().toUtf8().data();

    qDebug() << "是否为⽂件:"<< fileinfo.isFile();

    qDebug() << "是否为⽬录:" << fileinfo.isDir();

});

http://www.xdnf.cn/news/11732.html

相关文章:

  • 【Linux仓库】冯诺依曼体系结构与操作系统【进程·壹】
  • 一台电脑联网如何共享另一台电脑?网线方式
  • Mermaid 绘图--以企业权限视图为例
  • 【后端开发】goland分布式锁的几种实现方式(mysql,redis,etcd,zookeeper,mq,s3)
  • WordPress子主题RiPro-V5van无授权全开源版(源码下载)
  • 实践篇:利用ragas在自己RAG上实现LLM评估②
  • 【Pandas】pandas DataFrame sample
  • sql server如何创建表导入excel的数据
  • 虚拟斯德哥尔摩症候群:用户为何为缺陷AI辩护?
  • 搭建强化推荐的决策服务架构
  • 【深度学习优化算法】02:凸性
  • 深度探索:如何用DeepSeek重构你的工作流
  • HTML5 网页设计 基础
  • 网页加密/解密( ecode方式)
  • UVM糖果爱好者教程 - 27.打印消息冗余度
  • 使用ExtendSim进行水管理、可持续性和环境仿真建模
  • 推荐5个免费的字体转换网站工具
  • iOS开发_常用的正则表达式
  • MATCH_PARENT与FILL_PARENT:不要做什么和怎么做
  • Android 系统升级流程分析
  • 0-1背包问题(回溯法c++详解)
  • STM32外部挂载SDcard+移植Fatfs文件系统
  • tl r402路由器设置_tplogin.cn登录路由器怎么设置 tplogin.cn登录路由器设置步骤【详解】...
  • Android光线传感器获取光线强弱。LightSensorManager封装类
  • position的relative与absolute的区别
  • 非线性丙类功率放大器实验_倾斜光纤Bragg光栅:抑制高功率光纤激光系统SRS和SBS的理想选择...
  • 网安学习日志01:用kali复现ms17-010漏洞
  • 传奇私服游戏支付接口申请(已解决)
  • iTunes 9.0.3 更新
  • Linux系统服务之inetd