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

相关推荐
太阳的后裔1 小时前
随笔一些用C#封装的控件
开发语言·c#
tianyuanwo1 小时前
Rust语言组件RPM包编译原理与Cargo工具详解
开发语言·网络·rust·rpm
ajassi20005 小时前
开源 C++ QT Widget 开发(十五)多媒体--音频播放
linux·c++·qt·开源
CodeCraft Studio5 小时前
PDF处理控件Aspose.PDF教程:使用 Python 将 PDF 转换为 Base64
开发语言·python·pdf·base64·aspose·aspose.pdf
零点零一5 小时前
VS+QT的编程开发工作:关于QT VS tools的使用 qt的官方帮助
开发语言·qt
lingchen19067 小时前
MATLAB的数值计算(三)曲线拟合与插值
开发语言·matlab
gb42152878 小时前
java中将租户ID包装为JSQLParser的StringValue表达式对象,JSQLParser指的是?
java·开发语言·python
一朵梨花压海棠go8 小时前
html+js实现表格本地筛选
开发语言·javascript·html·ecmascript
蒋星熠8 小时前
Flutter跨平台工程实践与原理透视:从渲染引擎到高质产物
开发语言·python·算法·flutter·设计模式·性能优化·硬件工程
翻滚丷大头鱼8 小时前
Java 集合Collection—List
java·开发语言