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

相关推荐
Gary Studio1 小时前
安卓HAL C++基础-智能指针
开发语言·c++
啧不应该啊1 小时前
Day1 Python 与 C 的类型区别
c语言·开发语言
cen__y2 小时前
Linux07(信号01)
linux·运维·服务器·c语言·开发语言
xingpanvip2 小时前
星盘接口开发文档:星相日历接口指南
android·开发语言·前端·css·php·lua
guygg882 小时前
基于遗传算法的双层规划模型求解MATLAB实现
开发语言·matlab
凯瑟琳.奥古斯特3 小时前
SQLAlchemy核心功能解析
开发语言·python·flask
卷Java3 小时前
GPTQ vs AWQ vs GGUF:模型量化工具横向测评
开发语言·windows·python
charlie1145141913 小时前
嵌入式C++工程实践第20篇:GPIO 输入模式内部电路 —— 芯片是如何“听“到外部信号的
开发语言·c++·stm32·单片机
xinhuanjieyi3 小时前
极语言让ai学习的方法
开发语言·学习
xiaogutou11214 小时前
2026年历史课件PPT模板选购指南:教师备课效率与精度的平衡方案
开发语言·c#