结尾附赠源码
一、创建文件夹
使用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#include #include // 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 gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += 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.0
SOURCES +=
main.cpp
widget.cpp
HEADERS +=
widget.h
FORMS +=
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 #includeQT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACE class Widget : public QWidget { Q_OBJECT public: 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" #includeint 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#include #include #include 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() << "文件打开失败"; } }
希望大家可以自己多试试。



