从零开始学Qt(55):文件目录操作大全
liebian365 2024-11-05 11:50 3 浏览 0 评论
文件目录操作相关的类
Qt为文件和目录操作提供了一些类,利用这些类可以方便地实现一些操作。Qt提供的与文件和目录操作相关的类包括以下几个。
- QCoreApplication:用于提取应用程序路径、程序名等文件信息。
- QFile:除了打开文件操作外,QFile还有复制文件、删除文件等功能。
- QFilelnfo:用于提取文件的信息,包括路径、文件名、后缀等。
- QDir:用于提取目录或文件信息,获取一个目录下的文件或目录列表,创建或删除目录和文件,文件重命名等操作。
- QTemporaryDir和QTemporaryFile:用于创建临时目录和临时文件。
- QFileSystemWatcher:文件和目录监听类,监听目录下文件的添加、删除等变化,监听文件修改变化。
这些类基本涵盖了文件操作需要的主要功能,有些功能还在某些类里重复出现,例如QFile 和QDir都具有删除文件、判断文件是否存在的功能。
QCoreApplication类
QCoreApplication是为无GUI应用提供事件循环的类,是所有应用程序类的基类,其子类 QGuiApplication为有GUI界面的应用程序提供流控制和主要的设定,QGuiApplication的子类 QApplication为基于QWidget的应用程序提供支持,包括界面的初始化等。
创建的Qt Widget Application都是基于QApplication的,在main()函数里可以看到 QApplication的应用。
QCoreApplication提供了一些有用的静态函数,可以获取应用程序的名称、启动路径等信息, 几个函数的名称和功能如下 (省略了函数参数中的const关键字)。
- QString applicationDirPath():返回应用程序启动路径
- QString applicationFilePath():返回应用程序的带有目录的完整文件名
- QString applicationName():返回应用程序名称,无路径无后缀
- QStringList libraryPaths():返回动态加载库文件时,应用程序搜索的目录列表
- void setOrganizationName(QString &orgName):为应用程序设置一个机构名
- QString organizationName():返回应用程序的机构名
- void exit():退出应用程序
QFile类
前面使用QFile类进行文件的操作,应用了QFile::open()函数。除了打开文件提供读写操作 外,QFile还有一些静态函数和成员函数用于文件操作。下面是QFile的一些静态函数(省略了函数参数中的const关键字)。
- bool copy(QString &fileName, QString &newName):复制文件
- bool rename(QString &oldName, QString &newName):重命名文件
- bool remove(QString &fileName):删除文件
- bool exists(QString &fileName):判断文件是否存在
- bool setPermissions(QString &fileName, Permissions permissions):设置文件的权限,权限类型是枚举类型QFileDevice::Permission
- Permissions permissions(QString &fileName):返回文件的权限
静态函数是无需创建QFile类对象实例就可以调用的函数,例如使用静态函数exists()判断一 个文件是否存在的代码如下:
void MainWindow::on_pushButton_clicked()
{// QFile: :exists ()判断文件是否存在
QString sous=ui->editFile->text () ; //源文件
bool the=QFile::exists(sous);
if (the)
ui->plainTextEdit->appendPlainText(+"true \n");
else
ui->plainTextEdit->appendPlainText(+"false \n");
}
QFile还提供了对应的成员函数,如下所示 (省略了函数参数中的const关键字)。
- void setFileName(QString &name):设置文件名,文件已打开后不能再调用此函数
- bool copy(QString &newName) :当前文件复制为newName表示的文件
- bool rename(QString &newName): 将当前文件重命名为newName
- bool remove():删除当前文件
- bool exists():判断当前文件是否存在
- bool setPermissions(Permissions permissions):设置文件权限
- Permissions permissions():返回文件的权限
- qint64 size():返回文件的大小,字节数
创建QFile对象时可以在构造函数里指定文件名,也可以用setFileName()指定文件,但是文 件打开后不能再调用setFileName()函数。指定的文件作为QFile对象的当前文件,然后成员函数copy()、rename()等都是基于当前文件的操作。
QFilelnfo类
QFilelnfo类的接口函数提供文件的各种信息。QFilelnfo对象创建时可以指定一个文件名作为当前文件,也可以用setFile()函数指定一个文件作为当前文件。
QFilelnfo常见接口函数和功能如下所示。除了一个静态函数exists()之外,其他都是公共接口函数,接口函数的操作都是针对当前文件(省略了函数参数中的const关键字)。
- void setFile(QString &name):设置一个文件名,作为QFilelnfo操作的文件
- QString absoluteFilePath():返回带有文件名的绝对文件路径
- QString absolutePath():返回绝对路径,不带文件名
- QString fileName() :返回去除路径的文件名
- QString filePath():返回包含路径的文件名
- QString path():返回不含文件名的路径
- qint64 size():返回文件大小,以字节为单位
- QString baseName():返回文件基名,第一个“.”之前的文件名
- QString completeBaseName():返回文件基名,最后一个“.”之前的文件名
- QString suffix():最后一个“.”之后的后缀
- QString completeSuffix():第一个“.”之后的后缀
- bool isDir():判断当前对象是否是一个目录或目录的快捷方式
- bool isFile():判断当前对象是否是一个文件或文件的快捷方式
- bool isExecutable():判断当前文件是否是可执行文件
- QDateTime created():返回文件创建时间
- QDateTime lastModified():返回文件最后一次被修改的时间
- QDateTime lastRead():返回文件最后一次被读取的时间
- bool exists():判断文件是否存在
- bool exists(QString &file) :静态函数,判断file表示的文件是否存在
QFilelnfo提供的这些函数可以提取文件的信息,包括目录名、文件基名(不带后缀)、文件 后缀等,利用这些函数可以实现灵活的文件操作。例如,下面的代码是利用QFile::rename()函数和QFilelnfo的一些功能实现文件重命名功能的代码,其中就用到了提取路径、提取文件基名的功能。
void MainWindow::on_pushButton_2_clicked()
{ //QFile::rename()
QString sous=ui->editFile->text () ; //源文件
QFileInfo fileInfo (sous) ; //源文件信息
QString newFile=fileInfo.path()+"/"+fileInfo.baseName()+".XYZ";
QFile::rename(sous, newFile);//重命名文件,更改后缀名
}
QDir类
QDir是进行目录操作的类,在创建QDir对象时传递一个目录字符串作为当前目录,然后QDir 函数就可以针对当前目录或目录下的文件进行操作。下面是QDir的一些静态函数(省略了函数参数中的const关键字)。
- QString tempPath():返回临时文件目录名称
- QString rootPath():返回根目录名称
- QString homePath():返回主目录名称
- QString currentPath():返回当前目录名称
- bool setCurrent(QString &path) :设置path表示的目录为当前目录
- QFilelnfoList drives(): 返回系统的根目录列表,在Windows系统上返回的是盘符列表
在使用QFileDialog选择打开一个文件或目录时需要传递一个初始目录,这个时候就可以使用 QDir::currentPath()获取应用程序当前目录作为初始目录,前面一些实例程序的代码中已经用到过这个功能。
下面是QDir的一些公共接口函数(省略了函数参数中的const关键字)。
- QString absoluteFilePath(QString &fileName):返回当前目录下的一个文件的含绝对路径文件名
- QString absolutePath():返回当前目录的绝对路径
- QString canonicalPath():返回当前目录的标准路径
- QString filePath(QString &fileName) :返回目录下一个文件的目录名
- QString dirName():返回最后一级目录的名称
- bool exists():判断当前目录是否存在
- QStringList entryList(Filters filters = NoFilter, SortFlags sort =NoSort) :返回目录下的所有文件名、子目录名等
- bool mkdir(QString &dirName):在当前目录下建一个名称为dirName的子目录
- bool rmdir(QString &dirName) :删除指定的目录dirName
- bool remove(QString &fileName) :删除当前目录下的文件fileName
- bool rename(QString &oldName, QString &newName) :将文件或目录oldName更名为newName
- void setPath(QString &path) :设置QDir对象的当前目录
- bool removeRecursively():删除当前目录及其下面的所有文件
获取目录下的目录或文件列表的函数entryList()需要传递QDir::Filter枚举类型的参数以获取 不同的结果,QDir::Filter枚举类型的常用取值如下。
- QDir::AllDirs:列出所有目录名。
- QDir::Files:列出所有文件。
- QDir::Drives:列出所有盘符(Unix系统下无效)。
- QDir::NoDotAndDotDot:不列出特殊的符号,如“.”和“..”。
- QDir::AllEntries:列出目录下所有项目。
列出所有子目录的程序如下:
void MainWindow::on_pushButton_3_clicked()
{//列出子目录
QDir dir(ui->editDir->text());
QStringList strList=dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot);
ui->plainTextEdit->appendPlainText("所选目录下的所有目录:");
for(int i=0;i<strList.count();i++)
ui->plainTextEdit->appendPlainText(strList.at(i));
ui->plainTextEdit->appendPlainText("\n");
}
列出一个目录下所有文件的程序如下:
void MainWindow::on_pushButton_4_clicked()
{//列出所有文件
QDir dir(ui->editDir->text());
QStringList strList=dir.entryList(QDir::Files);
ui->plainTextEdit->appendPlainText ("所选目录下的所有文件:");
for(int i=0; i<strList.count(); i++)
ui->plainTextEdit->appendPlainText(strList.at(i));
ui->plainTextEdit->appendPlainText("\n");
}
QTemporaryDir 和 QTemporaryFile
QTemporaryDir是用于创建、删除临时目录的类,其主要函数如下。
- void setAutoRemove(bool b):设置为是否自动删除
- QString path():返回创建的临时目录名称
- bool remove():删除此临时目录及其下面所有文件
在系统临时目录,即QDir::tempPath目录下创建一个临时目录,临时目录名称以QCoreApplication::applicationName()为前缀,后加6个字符。临时目录可以设置为使用完后自动删除,即临时目录变量删除时,临时目录也删除。
QTemporaryFile是用于创建临时文件的类,临时文件保存在系统临时目录下。临时文件以 QCoreApplication::applicationName()作为文件名,以“XXXXXX” 6个随机数字作为文件后缀。将QTemporaryFile::setAutoRemove()函数设置为是否自动删除临时文件,QTemporaryFile:: open()函数用于打开临时文件,只有打开临时文件,才实际创建了此文件。
QFileSystemWatcher类
QFileSystemWatcher是对目录和文件进行监听的类。把某些目录或文件添加到QFileSystem Watcher对象的监听列表后,当目录下发生文件新建、删除等操作时会发射directoryChanged()信号,当监听的文件发生修改、重命名等操作时,会发射fileChanged()信号。所以,这个类在进行目录或文件监听时起作用。
QFileSystemWatcher的主要接口函数如下所示 (省略了函数参数中的const关键字)。
- bool addPath(QString &path):添加一个监听的目录或文件
- QStringList addPaths(QStringList &paths) :添加需要监听的目录或文件列表
- QStringList directories():返回监听的目录列表
- QStringList files():返回监听的文件列表
- bool removePath(QString &path) :移除监听的目录或文件
- QStringList removePaths(QStringList &paths) :移除监听的目录或文件列表
QFileSystemWatcher有两个信号,分别是目录变化和文件变化时发射的信号。
- void QFileSystemWatcher::directoryChanged(const QString &path)
- void QFileSystemWatcher::fileChanged(const QString &path)
图中是实例中测试QFileSystemWatcher的界面。首先打开一个目录和一个文件,单击 “addPath开始监听”按钮将文件和目录都添加到监听列表,并且将信号与槽函数关联起来。然后在目录下复制某个文件,会发射directoryChanged()信号,重命名所监听的文件后会发射fileChanged()信号,如图所示的运行结果。
为了测试QFileSystemWatcher的功能,在主窗口类中定义了 QFileSystemWatcher类型的变量和两个信号的槽函数,定义如下:
private:
QFileSystemWatcher fileWatcher;
public slots:
void on_directoryChanged(const QString path);
void on_fileChanged(const QString path);
两个槽函数仅是显示传递的参数,并显示提示文字,其代码如下:
void MainWindow::on_directoryChanged(const QString path)
{//directoryChanged ()信号的槽函数
ui->plainTextEdit->appendPlainText(path);
ui->plainTextEdit->appendPlainText("目录发生了变化\n");
}
void MainWindow::on_fileChanged(const QString path)
{//fileChanged()信号的槽函数
ui->plainTextEdit->appendPlainText(path);
ui->plainTextEdit->appendPlainText ("文件发生了变化\n");
}
图中QFileSystemWatcher分组里“addPath开始监听”和“removePath停止监听”两个按钮的代码如下:
void MainWindow::on_pushButton_5_clicked()
{//开始监听
ui->plainTextEdit->appendPlainText("监听目录:"+ui->editDir->text () +"\n");
fileWatcher.addPath(ui->editDir->text ());//添力口监听目录
fileWatcher.addPath(ui->editFile->text ());//添力口监听文件
QObject::connect(&fileWatcher,&QFileSystemWatcher::directoryChanged,
this,&MainWindow::on_directoryChanged); //directoryChanged
QObject::connect(&fileWatcher,&QFileSystemWatcher::fileChanged,
this,&MainWindow::on_fileChanged); //fileChanged
}
void MainWindow::on_pushButton_6_clicked()
{//停止监听
ui->plainTextEdit->appendPlainText("停止监听:"+ui->editDir->text()+"\n");
fileWatcher.removePath(ui->editDir->text());
fileWatcher.removePath(ui->editFile->text());
QObject::disconnect(&fileWatcher,&QFileSystemWatcher::directoryChanged,
this,&MainWindow::on_directoryChanged); //directoryChanged
QObject::disconnect(&fileWatcher,&QFileSystemWatcher::fileChanged,
this,&MainWindow::on_fileChanged); //fileChanged
}
釆用addPath()函数添加目录和文件后,将信号和槽函数关联起来,开始监听。
停止监听时,用removePath()函数移除监听的目录和文件,并用disconnect()解除信号与槽的关联。
相关推荐
- 快递查询教程,批量查询物流,一键管理快递
-
作为商家,每天需要查询许许多多的快递单号,面对不同的快递公司,有没有简单一点的物流查询方法呢?小编的回答当然是有的,下面随小编一起来试试这个新技巧。需要哪些工具?安装一个快递批量查询高手快递单号怎么快...
- 一键自动查询所有快递的物流信息 支持圆通、韵达等多家快递
-
对于各位商家来说拥有一个好的快递软件,能够有效的提高自己的工作效率,在管理快递单号的时候都需要对单号进行表格整理,那怎么样能够快速的查询所有单号信息,并自动生成表格呢?1、其实方法很简单,我们不需要一...
- 快递查询单号查询,怎么查物流到哪了
-
输入单号怎么查快递到哪里去了呢?今天小编给大家分享一个新的技巧,它支持多家快递,一次能查询多个单号物流,还可对查询到的物流进行分析、筛选以及导出,下面一起来试试。需要哪些工具?安装一个快递批量查询高手...
- 3分钟查询物流,教你一键批量查询全部物流信息
-
很多朋友在问,如何在短时间内把单号的物流信息查询出来,查询完成后筛选已签收件、筛选未签收件,今天小编就分享一款物流查询神器,感兴趣的朋友接着往下看。第一步,运行【快递批量查询高手】在主界面中点击【添...
- 快递单号查询,一次性查询全部物流信息
-
现在各种快递的查询方式,各有各的好,各有各的劣,总的来说,还是有比较方便的。今天小编就给大家分享一个新的技巧,支持多家快递,一次能查询多个单号的物流,还能对查询到的物流进行分析、筛选以及导出,下面一起...
- 快递查询工具,批量查询多个快递快递单号的物流状态、签收时间
-
最近有朋友在问,怎么快速查询单号的物流信息呢?除了官网,还有没有更简单的方法呢?小编的回答当然是有的,下面一起来看看。需要哪些工具?安装一个快递批量查询高手多个京东的快递单号怎么快速查询?进入快递批量...
- 快递查询软件,自动识别查询快递单号查询方法
-
当你拥有多个快递单号的时候,该如何快速查询物流信息?比如单号没有快递公司时,又该如何自动识别再去查询呢?不知道如何操作的宝贝们,下面随小编一起来试试。需要哪些工具?安装一个快递批量查询高手快递单号若干...
- 教你怎样查询快递查询单号并保存物流信息
-
商家发货,快递揽收后,一般会直接手动复制到官网上一个个查询物流,那么久而久之,就会觉得查询变得特别繁琐,今天小编给大家分享一个新的技巧,下面一起来试试。教程之前,我们来预览一下用快递批量查询高手...
- 简单几步骤查询所有快递物流信息
-
在高峰期订单量大的时候,可能需要一双手当十双手去查询快递物流,但是由于逐一去查询,效率极低,追踪困难。那么今天小编给大家分享一个新的技巧,一次能查询多个快递单号的物流,下面一起来学习一下,希望能给大家...
- 物流单号查询,如何查询快递信息,按最后更新时间搜索需要的单号
-
最近有很多朋友在问,如何通过快递单号查询物流信息,并按最后更新时间搜索出需要的单号呢?下面随小编一起来试试吧。需要哪些工具?安装一个快递批量查询高手快递单号若干怎么快速查询?运行【快递批量查询高手】...
- 连续保存新单号功能解析,导入单号查询并自动识别批量查快递信息
-
快递查询已经成为我们日常生活中不可或缺的一部分。然而,面对海量的快递单号,如何高效、准确地查询每一个快递的物流信息,成为了许多人头疼的问题。幸运的是,随着科技的进步,一款名为“快递批量查询高手”的软件...
- 快递查询教程,快递单号查询,筛选更新量为1的单号
-
最近有很多朋友在问,怎么快速查询快递单号的物流,并筛选出更新量为1的单号呢?今天小编给大家分享一个新方法,一起来试试吧。需要哪些工具?安装一个快递批量查询高手多个快递单号怎么快速查询?运行【快递批量查...
- 掌握批量查询快递动态的技巧,一键查找无信息记录的两种方法解析
-
在快节奏的商业环境中,高效的物流查询是确保业务顺畅运行的关键。作为快递查询达人,我深知时间的宝贵,因此,今天我将向大家介绍一款强大的工具——快递批量查询高手软件。这款软件能够帮助你批量查询快递动态,一...
- 从复杂到简单的单号查询,一键清除单号中的符号并批量查快递信息
-
在繁忙的商务与日常生活中,快递查询已成为不可或缺的一环。然而,面对海量的单号,逐一查询不仅耗时费力,还容易出错。现在,有了快递批量查询高手软件,一切变得简单明了。只需一键,即可搞定单号查询,一键处理单...
- 物流单号查询,在哪里查询快递
-
如果在快递单号多的情况,你还在一个个复制粘贴到官网上手动查询,是一件非常麻烦的事情。于是乎今天小编给大家分享一个新的技巧,下面一起来试试。需要哪些工具?安装一个快递批量查询高手快递单号怎么快速查询?...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- wireshark怎么抓包 (75)
- qt sleep (64)
- cs1.6指令代码大全 (55)
- factory-method (60)
- sqlite3_bind_blob (52)
- hibernate update (63)
- c++ base64 (70)
- nc 命令 (52)
- wm_close (51)
- epollin (51)
- sqlca.sqlcode (57)
- lua ipairs (60)
- tv_usec (64)
- 命令行进入文件夹 (53)
- postgresql array (57)
- statfs函数 (57)
- .project文件 (54)
- lua require (56)
- for_each (67)
- c#工厂模式 (57)
- wxsqlite3 (66)
- dmesg -c (58)
- fopen参数 (53)
- tar -zxvf -c (55)
- 速递查询 (52)