网站首页 > 编程文章 正文
文件目录操作相关的类
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()解除信号与槽的关联。
猜你喜欢
- 2024-10-14 「Qt入门第31篇」 网络(一)Qt网络编程简介
- 2024-10-14 qt 做手机android的串口通讯 qt下串口通信
- 2024-10-14 Qt 读写txt文本文件(qt读入文件)
- 2024-10-14 Qt 信号槽连接不成功问题原因汇总
- 2024-10-14 QML 性能优化建议(一)(qml例程)
- 2024-10-14 C++ QT中文件的读写操作(UI界面)(qt怎么读取文件内容)
- 2024-10-14 Qt 中的智能指针(qt 函数指针)
- 2024-10-14 Qt如何读取和写入配置文件的数据(qt 读写配置文件)
- 2024-10-14 Qt pro文件中的常用宏说明(qt pro 自定义宏)
- 2024-10-14 Qt应用程序主窗口:拖放操作与打印文档
你 发表评论:
欢迎- 05-09Spring Boot3 RESTful 接口参数校验,这篇吃透就够了!
- 05-09《Spring6》第02节:基于XML方式搭建Spring6框架开发环境
- 05-09MapStruct架构设计(mapstruct @mapping)
- 05-09分布式微服务架构组件(分布式微服务架构设计)
- 05-09Java Swing组件下的JButton实例(java swing 组件)
- 05-09java基础都在这了,小主们拿去吧(java基础是指什么)
- 05-09AOP的实现落地(拦截过滤),一切都要从Servlet说起
- 05-09【Spring Boot】WebSocket 的 6 种集成方式
- 最近发表
-
- Spring Boot3 RESTful 接口参数校验,这篇吃透就够了!
- 《Spring6》第02节:基于XML方式搭建Spring6框架开发环境
- MapStruct架构设计(mapstruct @mapping)
- 分布式微服务架构组件(分布式微服务架构设计)
- Java Swing组件下的JButton实例(java swing 组件)
- java基础都在这了,小主们拿去吧(java基础是指什么)
- AOP的实现落地(拦截过滤),一切都要从Servlet说起
- 【Spring Boot】WebSocket 的 6 种集成方式
- Java 中五种最常见加密算法:原理、应用与代码实现
- 用注解进行参数校验,spring validation介绍、使用、实现原理分析
- 标签列表
-
- spire.doc (59)
- system.data.oracleclient (61)
- 按键小精灵源码提取 (66)
- pyqt5designer教程 (65)
- 联想刷bios工具 (66)
- c#源码 (64)
- graphics.h头文件 (62)
- mysqldump下载 (66)
- sqljdbc4.jar下载 (56)
- libmp3lame (60)
- maven3.3.9 (63)
- 二调符号库 (57)
- 苹果ios字体下载 (56)
- git.exe下载 (68)
- diskgenius_winpe (72)
- pythoncrc16 (57)
- solidworks宏文件下载 (59)
- qt帮助文档中文版 (73)
- satacontroller (66)
- hgcad (64)
- bootimg.exe (69)
- android-gif-drawable (62)
- axure9元件库免费下载 (57)
- libmysqlclient.so.18 (58)
- springbootdemo (64)
本文暂时没有评论,来添加一个吧(●'◡'●)