Qt第十三章 目录和文件操作

目录和文件操作

文章目录

设备I/O

简介

I/O设备的类型

基本文件读写

QFile
c 复制代码
    QFile file("C:/Users/PVer/Documents/123.txt");
    if (!file.open(QFile::ReadOnly)) {
        qWarning() << "文件打开失败";
        return;
    }
    while (!file.atEnd()) {
        // qDebug() << file.readLine(); // 按行读取,会把\t\r\n等转义字符读取进去
        char c;
        file.getChar(&c); // 单个字符读取
        qDebug() << c;
    }
    bool b = file.rename("abc.txt"); // 重命名,重命名的文件在当前工程Debug文件夹里面,原文件删除
    if (b) {
        qDebug() << file.fileName(); // 如果改名成功,显示当前文件名abc.txt
        file.copy("abc.txt", "C:/Users/PVer/Documents/123.txt"); // 把文件拷贝回去
    }
    file.remove(); // 如果之前重命名成功了,就是移除abc.txt,如果没重命名成功,就是删除123.txt了
    file.close(); // 关闭文件,发出了信号,但是要等待系统关闭才关闭
    qDebug() << file.fileName(); // 这里输出abc.txt
    QFile file1("C:/Users/PVer/Documents/123.txt");
    if (!file1.open(QFile::ReadWrite)) {
        qWarning() << "打开123失败";
        return;
    }
    file1.write("这是新增的内容"); // 写入新内容
    file1.close();
    file1.copy("C:/Users/PVer/Documents/123.txt", "cde.txt"); // 如果上一行关闭文件不执行,拷贝的是之前没修改的文件,如果执行了,拷贝的修改后的文件
QTemporaryFile
c 复制代码
    QTemporaryFile file("123.txt"); // 创建临时文件
    if (!file.open()) {
        qDebug() << "文件打开失败";
        return;
    }
    qInfo() << file.fileName(); // 全局文件名,每次创建的名字不一样,会在后面加随机字符
    qInfo() << file.fileTemplate(); // 获取临时文件的位置,相对位置

    file.write("1234");
    //file.setAutoRemove(false); // 设置临时文件默认不移除,如果不设置,程序结束自动移除

流操作

QTextStream
c 复制代码
    QFile file("C:/Users/PVer/Documents/123.txt");
    if (!file.open(QFile::ReadWrite)) {
        qWarning() << "文件打开失败";
        return;
    }
    QTextStream ts(&file);
    // qInfo() << ts.readLine(); // 按行读取
    // qInfo() << ts.read(100); // 读取100个字节
    // ts << 2024 << '\n'
    //    << 2.33 << '\n'
    //    << "abc" << '\n';
    int a;
    QString str;
    float b;
    ts >> a >> b >> str;
    qDebug() << a << b << str;
QDataStream
c 复制代码
    QByteArray arr;
    QDataStream dt(&arr, QIODevice::ReadWrite);
    int a;
    dt << 1;
    qDebug() << arr; // 运行结果"\x00\x00\x00\x01"

QFileInfo

c 复制代码
    QFileInfo fi("G:/Qt/MaintenanceTool.exe");
    if (!fi.exists())
        return;
    qInfo() << fi.path(); //"G:/Qt"
    qInfo() << fi.fileName(); //"MaintenanceTool.exe"
    qInfo() << fi.baseName(); //"MaintenanceTool"

QDir

c 复制代码
    QDir dir("G:/Qt");
    qDebug() << dir.exists();
    if (!dir.exists())
        return;
    dir.setFilter(QDir::NoDotAndDotDot | QDir::Files); // 排除.和..文件
    qDebug() << dir.count(); // 输出包含文件数量
    QFileInfoList fLst = dir.entryInfoList(QStringList() << "*.txt"); // 获取后缀.txt文件信息
    for (auto& f : fLst)
        qDebug() << f.fileName();

QFileSystemWatcher

c 复制代码
    QFileSystemWatcher* fsc = new QFileSystemWatcher;
    fsc->addPath("G:/abc/123.TXT");
    qDebug() << fsc->files();
    fsc->addPaths(QStringList() << "G:/abc/def"
                                << "G:/abc/dsds");
    qDebug() << fsc->directories();
    connect(fsc, &QFileSystemWatcher::fileChanged, [=] { qDebug() << "文件改变"; });
    connect(fsc, &QFileSystemWatcher::directoryChanged, [=] { qDebug() << "目录改变"; });

QStandardPaths

c 复制代码
    qInfo() << QStandardPaths::displayName(QStandardPaths::DesktopLocation);
    qInfo() << QStandardPaths::findExecutable("qtcreator.exe", QStringList() << "G:/Qt/Tools/QtCreator/bin"); // 在当前文件夹中查找可执行程序
    qInfo() << QStandardPaths::locate(QStandardPaths::DocumentsLocation, "123.txt"); // 文档里面查找,找到就返回地址,找不到就是个空字符串
    qInfo() << QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); // 目录不一定存在,只是把目录作一个拼接,显示拼接的地址

QSettings

  1. 写入注册表
c 复制代码
    QSettings setting("yerennuo", "fileTest");
    setting.setValue("size", QSize(1280, 720)); // 在注册表里保存
c 复制代码
    setting.beginGroup("window"); // 在新开的组window里写入
    setting.setValue("pos", QPoint(100, 100));
    setting.endGroup();
c 复制代码
   QSettings setting1("HKEY_CURRENT_USER\\SOFTWARE\\yerennuo\\fileTest", QSettings::NativeFormat);
   qDebug() << setting1.value("size").toSize(); // 获取结果QSize(1280, 720)
   qDebug() << setting1.value("window/pos").toPoint();
  1. 写入ini文件
c 复制代码
   QSettings st("config.ini", QSettings::IniFormat);
   st.setValue("pos", QPoint(200, 200));
   st.beginGroup("window");
   st.setValue("rect", QRect(0, 0, 10, 10));
   st.endGroup();

在debug文件夹会出现一个config.ini

相关推荐
SteveDraw41 分钟前
C++动态链接库封装,供C#/C++ 等编程语言使用——C++动态链接库概述(总)
开发语言·c++·c#·封装·动态链接库
十五年专注C++开发1 小时前
设计模式之单例模式(二): 心得体会
开发语言·c++·单例模式·设计模式
flyair_China1 小时前
【云架构】
开发语言·php
Chef_Chen1 小时前
从0开始学习R语言--Day20-ARIMA与格兰杰因果检验
开发语言·学习·r语言
zh_xuan1 小时前
c++ std::pair
开发语言·c++
CodeWithMe2 小时前
【C/C++】EBO空基类优化介绍
开发语言·c++
404.Not Found2 小时前
Day46 Python打卡训练营
开发语言·python
love530love2 小时前
【PyCharm必会基础】正确移除解释器及虚拟环境(以 Poetry 为例 )
开发语言·ide·windows·笔记·python·pycharm
凌辰揽月2 小时前
Web后端基础(基础知识)
java·开发语言·前端·数据库·学习·算法
海奥华22 小时前
go中的接口返回设计思想
开发语言·后端·golang