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

【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();

});

相关文章:

  • VBA中类的解读及应用第二十四讲:把源数据赋给类利用类完成查找
  • 慢SQL调优(二):大表查询
  • Python有哪些经典的常用库?(第一期)
  • 【MySQL】 约束
  • linux系统--iptables实战案例
  • 主流Agent开发平台学习笔记:扣子罗盘coze loop 功能拆解
  • 【LLMs篇】13:LLaDA—大型语言扩散模型
  • Java异步编程难题拆解技术
  • 计算机系统结构-第五章-目录式协议
  • 修复与升级suse linux
  • 1950-2009年咸海测深特征数据
  • leetcode 二叉搜索树中第k小的元素 java
  • 小白初学SpringBoot记录
  • Inno Setup 脚本中常用术语释义
  • 一站式直播工具:助力内容创作者高效开启直播新时代
  • SQL语法
  • RAMSUN分享全新超值型MM32F0050系列MCU
  • Java基础原理与面试高频考点
  • Python绘图库及图像类型之基础图表
  • 告别延迟,拥抱速度:存储加速仿真应用的解决方案【1】
  • 如何让自己做的网页有网站/快速网站
  • 网站是怎么做的吗/网站外链推广平台
  • 家里笔记本做网站 怎么解析/万词优化
  • 合肥网站建设哪家好/个人在线网站推广
  • 网站没有在工信部备案/seo网站建站
  • 黄村网站建设一条龙/小网站搜什么关键词