目录和文件操作

设备I/O

简介

I/O设备的类型

基本文件读写

QFile
    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
    QTemporaryFile file("123.txt"); // 创建临时文件
    if (!file.open()) {
        qDebug() << "文件打开失败";
        return;
    }
    qInfo() << file.fileName(); // 全局文件名,每次创建的名字不一样,会在后面加随机字符
    qInfo() << file.fileTemplate(); // 获取临时文件的位置,相对位置

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

流操作

QTextStream
    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
    QByteArray arr;
    QDataStream dt(&arr, QIODevice::ReadWrite);
    int a;
    dt << 1;
    qDebug() << arr; // 运行结果"\x00\x00\x00\x01"

QFileInfo

    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

    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

    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() << "目录改变"; });

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

QStandardPaths

    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. 写入注册表
    QSettings setting("yerennuo", "fileTest");
    setting.setValue("size", QSize(1280, 720)); // 在注册表里保存

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

    setting.beginGroup("window"); // 在新开的组window里写入
    setting.setValue("pos", QPoint(100, 100));
    setting.endGroup();

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

   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文件
   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
Qt第十三章 目录和文件操作-LMLPHP

07-26 07:29