使用Qt的QDir/QFile类创建文件夹、以时间命名的dat/txt等文件、从文件中读写数据等操作

结尾附赠源码

一、创建文件夹

使用QDir类用来创建文件夹,可以是绝对路径、也可以是相对路径。

例如:绝对路径

  QDir("/home/user/Documents")QDir("C:/Documents and Settings")

例如:相对路径

QDir("images/landscape.png")

主要操作如下:

// 声明目录对象
QDir dir(path);
// 判断此目录文件是否存在
if (dir.exists(path)) {return path;
}

二、创建文件

使用QFire类来创建文件。

exists();用来判断文件是否存在。
QFile::WriteOnly|QFile::Text;以只写文本方式创建文件

三、创建文件夹和文件的函数实现

1. 新建项目

2. 在项目的头文件(.h)中加入函数声明,如下

QString   createMultipleFolders(const QString path);             // 创建文件夹
QString   createFile(const QString path,const QString suffix);   // 创建.dat文件

3. 在(.cpp)文件中添加以下代码

// 1. 引入头文件
#include <QDateTime>
#include <QFile>
#include <QDir>// 2. 在构造函数中添加代码
QString path = createMultipleFolders("D:\\1\\001");
QString pathFile = createFile(path,".txt");// 3.  创建多级文件夹 
QString Widget::createMultipleFolders(const QString path)
{QDir dir(path);if (dir.exists(path)) {return path;}QString parentDir = createMultipleFolders(path.mid(0, path.lastIndexOf('\\')));//截取根目录QString dirName = path.mid(path.lastIndexOf('\\') + 1);//截取父目录QDir parentPath(parentDir);if (!dirName.isEmpty()){parentPath.mkpath(dirName);}return parentDir + "\\" + dirName;
}// 4. 创建文件 
QString Widget::createFile(const QString path,const QString suffix)
{QString createTime = QDateTime::currentDateTime().toString("yyyy-MM-dd HH-mm-ss");//文件名不能用“:”命名QString fileName = path + "\\" + createTime + suffix;QFile file(fileName);if(file.exists()){return fileName;}else{// 如果没有此文件,就创建file.open(QFile::WriteOnly|QFile::Text|QIODevice::Append);}return fileName;
}

4. 实现效果

创建成功! 不局限与".dat”文件,其他后缀名的也可以,自己试一下吧!

四、将数据写入文件

1. 使用QFire类;

2. QFile::WriteOnly|QFile::Text|QIODevice::Append;以只写文本方式创建文件,以追加方式写入文件;

3. 调用write()函数将数据写入指定文件中。

4. 实现如下

QFile file(pathFile);//上面操作已经创建出来的文件名
file.open(QIODevice::WriteOnly|QIODevice::Append|QIODevice::Text);
file.write("你好!");

5. 运行后,打开文件,可以看到你写入的数据

五、从文件中读取数据

1. 使用QFire类;

2. QFile::ReadWrite|QFile::Text;以读写方式打开文件;

3. 调用atEnd()函数判断是否读取到最后;

4. 调用readLine();函数一行一行读取数据

5. 读取完后,需要关闭文件。

6. 实现如下

在头文件中添加函数声明

void  readFileData();                            // 从文件中读取数据

在.cpp文件中实现

/* 从指定文件中读取数据 */
void Widget::readFileData()
{QFile file1("D:/1/001/2022-05-28 11-17-09.txt");// 读写模式打开文件file1.open(QIODevice::ReadWrite | QIODevice::Text);QString data;QStringList user_data;//判断文件是否打开成功if(file1.isOpen()){if(file1.size() != 0)//文件有数据{
//            qDebug() << "文件有数据";//一行一行一直读,直至读取失败while(!file1.atEnd()){// readAll();全部取出来data=file1.readLine();//读取一行存到data里
//                user_data=data.split(" ");//将data里的数据以空格作为分隔符存到user_data//......// 处理数据qDebug() << data; // 输出结果为:"你好!"}// 读取完后关闭文件file1.close();}}else{qDebug() << "文件打开失败";}
}

7. 运行后,能够获取到数据

 至此所有跟文件有关的操作就结束啦。下面附赠源码,可以直接复制可运行。

.pro 文件源码

QT       += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++11# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0SOURCES += \main.cpp \widget.cppHEADERS += \widget.hFORMS += \widget.ui# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

.h 头文件源码

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();QString   createMultipleFolders(const QString path);             // 创建文件夹QString   createFile(const QString path,const QString suffix);   // 创建.dat文件void      readFileData();                            // 从文件中读取数据private:Ui::Widget *ui;
};
#endif // WIDGET_H

main.cpp源码

#include "widget.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

.cpp源码

#include "widget.h"
#include "ui_widget.h"#include <QDateTime>
#include <QFile>
#include <QDir>
#include <QDebug>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 创建文件夹和文件QString path = createMultipleFolders("D:\\1\\001");QString pathFile = createFile(path,".txt");// 将数据写入文件中QFile file(pathFile);//上面操作已经创建出来的文件名file.open(QIODevice::WriteOnly|QIODevice::Append|QIODevice::Text);file.write("你好!");// 文件中读取数据readFileData();}Widget::~Widget()
{delete ui;
}
/* 创建多级文件夹 */
QString Widget::createMultipleFolders(const QString path)
{QDir dir(path);if (dir.exists(path)) {return path;}QString parentDir = createMultipleFolders(path.mid(0, path.lastIndexOf('\\')));//截取根目录QString dirName = path.mid(path.lastIndexOf('\\') + 1);//截取父目录QDir parentPath(parentDir);if (!dirName.isEmpty()){parentPath.mkpath(dirName);}return parentDir + "\\" + dirName;
}/* 创建文件 */
QString Widget::createFile(const QString path,const QString suffix)
{QString createTime = QDateTime::currentDateTime().toString("yyyy-MM-dd HH-mm-ss");//文件名不能用“:”命名QString fileName = path + "\\" + createTime + suffix;QFile file(fileName);if(file.exists()){return fileName;}else{// 如果没有此文件,就创建file.open(QFile::WriteOnly|QFile::Text|QIODevice::Append);}return fileName;
}/* 从指定文件中读取数据 */
void Widget::readFileData()
{QFile file1("D:/1/001/2022-05-28 11-17-09.txt");// 读写模式打开文件file1.open(QIODevice::ReadWrite | QIODevice::Text);QString data;QStringList user_data;//判断文件是否打开成功if(file1.isOpen()){if(file1.size() != 0)//文件有数据{
//            qDebug() << "文件有数据";//一行一行一直读,直至读取失败while(!file1.atEnd()){// readAll();全部取出来data=file1.readLine();//读取一行存到data里
//                user_data=data.split(" ");//将data里的数据以空格作为分隔符存到user_data//......// 处理数据qDebug() << data; // 输出结果为:"你好!"}// 读取完后关闭文件file1.close();}}else{qDebug() << "文件打开失败";}
}

希望大家可以自己多试试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/253498.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Qt:QDir类

说明 QDir提供了访问目录及目录下内容的类。 QDir既可以用于访问文件系统&#xff0c;也可以用于访问Qt 资源系统&#xff08;Qts resource system.&#xff09;。 Qt用 "/" 作为目录分隔符&#xff0c;此外&#xff0c;"/" 也是URL的路径分隔符。 QDi…

Qt:文件系统浏览实例(QDir、QFileInfoList、QListWidgetItem)

前言&#xff1a; 文件系统的浏览是目录操作的一个常用功能&#xff0c;下面通过程序&#xff0c;实现一个能够显示所有文件的浏览功能。 讲一讲如何使用QDir类以及各种过滤方式显示文件列表。 效果图&#xff1a; 实现步骤&#xff1a; 1、新建工程 工程名默认即可&#x…

Qt 创建文件 用QFile和QDir类

项目需求是 根据日期创建多级子文件夹, 根目录保存 log.txt 控制台程序实现 如下执行结果 createFile 为程序目录 文档结构: 源码: #include <QtCore/QCoreApplication> #include <QDir> #include <QFile> #include <QDebug> #include <QDateTim…

手写一个webpack插件(plugin)

熟悉 vue 和 react 的小伙伴们都知道&#xff0c;在执行过程中会有各种生命周期钩子&#xff0c;其实webpack也不例外&#xff0c;在使用webpack的时候&#xff0c;我们有时候需要在 webpack 构建流程中引入自定义的行为&#xff0c;这个时候就可以在 hooks 钩子中添加自己的方…

Linux系统下imx6ull QT编程—— C++基础(一)

Linux QT编程 文章目录 Linux QT编程前言一、 C的输入输出方式1.cout语法形式2.cin语法形式3.C之命名空间 namespace 前言 学习 C的面向对象编程&#xff0c;对学习 Qt 有很大的帮助 一、 C的输入输出方式 效率上&#xff0c;肯定是 C 语言的 scanf 和 printf 的效率高&#…

Windows本地提权 · 上篇

目录 at 命令提权 sc 命令提权 ps 命令提权 利用的是windows的特性&#xff0c;权限继承&#xff0c;命令或者服务创建调用的时候会以system权限调用&#xff0c;那么这个命令或者服务的权限也是system。 进程迁移注入提权 pinjector进程注入 MSF进程注入 令牌窃取提权…

【Unity3D】调整屏幕亮度、饱和度、对比度

1 屏幕后处理流程 调整屏幕亮度、饱和度、对比度&#xff0c;需要使用到屏幕后处理技术。因此&#xff0c;本文将先介绍屏幕后处理流程&#xff0c;再介绍调整屏幕亮度、饱和度、对比度的实现。 屏幕后处理即&#xff1a;渲染完所有对象后&#xff0c;得到一张屏幕图像&#xf…

android装备选择,巫师三前期必拿装备武器_巫师三前期必拿最强装备推荐选择_攻略...

巫师三狂猎是巫师系列游戏的第三部&#xff0c;游戏是根据小说改编而来&#xff0c;既有小说的剧情又有精美逼真的游戏画面&#xff0c;曾获奖无数&#xff01;第三部的游戏剧情是讲主人公杰洛特(猎魔人)的最终冒险。游戏以战斗为主&#xff0c;并结合主线任务和支线任务&#…

哈利波特AR游戏-巫师联盟 深度解析

今年AR技术的进展&#xff0c;及相关应用值得我们关注。给大家推荐一个AR游戏&#xff0c;应该会超越Pokemon Go。 [ 哈利波特&#xff1a;巫师联盟 ] 这一天可能是魔法世界最重要的一天 AR游戏《哈利波特:巫师联盟》 于2019年6月20日正式上线。 全世界的哈利波特迷&#xff…

大地图开发管理:《巫师3》Umbra遮挡剔除技术

本演讲介绍巫师3使用Umbra实现的遮挡剔除技术。笔记略过了一些过于平凡的实现细节&#xff0c;包括流的加载&#xff0c;如何向Umbra提交数据&#xff1b;也略过了一半以上关于“游戏应当如何选择中间件”的讨论。Umbra 3Umbra是一个芬兰中间件公司&#xff0c;做出核心技术之后…

《巫师3:狂猎》4.01版更新 PC端已上线

去年12月&#xff0c;《巫师3》免费升级次世代版&#xff0c;加入DLSS 3支持&#xff0c;RTX 40系显卡的用户能直接提升体验感&#xff0c;RTX 30系用户能通过DLSS 2获得更稳定的帧数。 目前。《巫师3&#xff1a;狂猎》4.01版已更新上线&#xff0c;在PC、PlayStation 和 Xbo…

哈利波特3 阿兹卡班的囚徒

《哈利波特3阿兹卡班的囚徒》DVD国语配音高清收藏版《哈利波特3&#xff1a;阿兹卡班的囚徒》 片名&#xff1a;Harry Potter and the Prisoner of Azkaban 译名&#xff1a;哈利波特3&#xff1a;阿兹卡班的囚徒 导演&#xff1a;阿方索卡隆Alfonso Cuaron 主演&#xff1a;丹…

昆特牌显示无法连接至服务器,巫师之昆特牌总是显示无法连接网络

巫师之昆特牌这款游戏相信大家都不陌生吧&#xff0c;最近小编经常收到巫师之昆特牌总是显示无法连接网络问题的反馈&#xff0c;接下来小编就为大家提供几种常见的处理方案。 巫师之昆特牌游戏简介 《巫师之昆特牌》是由CD PROJEKT RED开发的一款卡牌类游戏。 游戏的主角是北方…

c语言谭浩强百草园有卖吗,巫师3白果园有什么神器

巫师3这款游戏中&#xff0c;装备对玩家是有一定的影响的&#xff0c;在白果园中隐藏着两个前期神器&#xff0c;是两件毒蛇学派的装备&#xff0c;在哪里呢&#xff0c;下面游戏吧小编为大家带来介绍。 巫师3白果园有什么神器 白果园神器指的是白果园中毒蛇学派的毒蛇钢剑和毒…

讯飞星火认知大模型与ChatGPT的对比分析

引言&#xff1a; 人工智能是当今科技领域的热门话题&#xff0c;自然语言处理是人工智能的重要分支。自然语言处理的目标是让计算机能够理解和生成自然语言&#xff0c;实现人机交互和智能服务。近年来&#xff0c;随着深度学习的发展&#xff0c;自然语言处理领域出现了许多创…

【数据结构6】二叉树的基本操作

文章目录 ⭐️写在前面的话⭐️二叉树的一些基本操作1、结构定义2、先序创建这棵树3、按满二叉树方式创建4、三种递归遍历5、层次遍历6、求二叉树的深度7、求叶子结点数8、三种非递归遍历9、先序线索化二叉树10、先序线索化后遍历11、中序线索化二叉树12、中序线索化后遍历主函…

C语言——每日一题

1.倒置字符串 倒置字符串 要将每一个单词逆序输出&#xff0c;首先可以将整个字符串内容都逆序输出&#xff0c;然后再将字符串中的每一个单词再进行逆序。 例如&#xff1a;逆序 i like beijing. 先逆序成&#xff1a;.gnijieb ekil i 再将每个单词逆序&#xff1a; beij…

Matlab实现曲线拟合的最小二乘法

实验条件 实验用例 x0102030405060708090y6867.166.465.664.661.861.060.860.460 实验要求 利用曲线拟合的线性最小二乘法求被逼近函数f(x)在点x55处的近似值&#xff0c;并画出实验数据和直线。 代码实现 X[0,10,20,30,40,50,60,70,80,90]; Y[68,67.1,66.4,65.6,64.6,61.…

达梦数据库8安装教程

第一步&#xff1a;双击驱动 注意&#xff1a;如果双击显示没有驱动&#xff0c;则安装WinCDEmu软件。 第二步&#xff1a;双击setup.exe安装包 第三步&#xff1a;选择时区 第四步&#xff1a;验证key文件 因为我们是免费试用&#xff0c;所以没有key文件&#xff0c;直接下一…

线性回归——最小二乘法

线性回归&#xff1a;自变量和因变量之间是线性关系&#xff0c;例如&#xff1a;h a0a1x1a2x2…anxn。线性回归预测的一般步骤&#xff1a;假设特征变量Xi满足线性关系&#xff0c;然后根据给定的训练数据训练出一个模型&#xff0c;最后通过此模型进行预测。线性回归的根本就…