Qt文本读写之二:文件目录及目录内的文件操作

本文介绍了Qt中的QDir和QFileInfo类在处理文件和目录时的常见函数,包括创建、遍历、删除目录和文件,以及获取文件信息。QDir的exists()、mkdir()、mkpath()、entryInfoList()等方法用于目录操作,QFileInfo的isFile()、isDir()、exists()等方法用于文件属性检查。同时,文章提供了访问桌面文件夹、定时处理文件夹内文件以及将数据写入文件的示例。

参考文章链接如下:
Qt文本读写之一:输入输出设备和文件操作
Qt文本读写之二:目录操作

常用类及其函数

QDir类

QDir类提供对目录及其内容的访问。
常用函数如下:

目录创建

bool QDir::exists() const;//用于确定目录是否存在,存在返回true,不存在返回false

bool isFile() const;//判断是否是文件

bool isDir() const;//判断是否是文件夹

QString absolutePath() const;//获取当前目录路径

QString QDir::absoluteFilePath(const QString &fileName) const;//用于获取给定文件名的完整绝对路径,根据给定的文件名称(如1.bmp)给出在目录中的绝对路径,包含文件名及后缀

QString QDir::rootPath();//获取当前目录的根目录,如“C:/”

QString fileName() const;//获取文件名

bool QDir::mkdir(const QString &dirName) const;//用于在文件系统中创建一个新的目录,但要创建多级目录的话,还是要调用mkpath函数

bool QDir::mkpath(const QString &dirPath) const;//用于在文件系统中创建一个目录,包括其所有的父目录。如果目录成功创建或已经存在,则返回true;否则返回false。如果路径中的某个目录不存在,函数会递归地创建缺失的目录层级

QString QDir::currentPath();//是该类的静态成员函数,返回的是当前应用程序的工作目录的路径,即程序源码路径

遍历目录及文件

void QDir::setNameFilters(const QStringList &nameFilters);//用于设置目录对象的名称过滤器来限制列出或搜索的文件或目录的类型。

//函数功能:遍历文件夹路径下的子目录或者文件返回的是返回此文件加下所有文件及目录的完整信息,包括用户组,大小,访问时间,权限等等所有与文件有关的信息,以**QFileInfoList ** 格式返回。
QFileInfoList QDir::entryInfoList(const QStringList &nameFilters, QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const;//滤波器nameFilters是手动设置(可以通过setNameFilters函数设置),滤波器filter是枚举型
QFileInfoList QDir::entryInfoList(Filters filters = NoFilter, SortFlags sort = NoSort) const;//滤波器filter是枚举型

根据以上的函数,举例如下:

QString dir_str = "image/" + QDate::currentDate().toString("yyyy-mm-dd");
QDir dir(dir_str );
if(!dir.exists())
{
   
   
	dir.mkpath(dir_str );
}
QStringList filter;
filter << "*.bmp";
dir.setNameFilters(filter);
QFileInfoList  fileInfoList = dir.entryInfoList(filter);
if(fileInfoList.cout() > 100)
{
   
   
	//移除一个文件(bmp图像)
}
else
{
   
   
	//保存一个文件(bmp图像)
}

//函数功能:遍历文件夹路径下的子目录或者文件返回的是所有的文件夹名称或文件名称,不是路径,以QStringList 格式返回
//QDir::entryList并不支持目录的深度搜索,只会获得一级目录下的内容,因此需要通过递归的方式进行深度搜索
QStringList QDir::entryList(const QStringList &nameFilters, Filters filters = NoFilter, SortFlags sort = NoSort) const;//滤波器nameFilters是手动设置(滤波器格式:如字符串"*.bmp"),滤波器filter是枚举型
QStringList QDir::entryList(Filters filters = NoFilter, SortFlags sort = NoSort) const;//滤波器filter是枚类型

Filters枚举类型的取值如下:

  • QDir::Dirs 列出目录;
  • QDir::AllDirs 列出所有目录,不对目录名进行过滤;
  • QDir::Files 列出文件;
  • QDir::Drives 列出逻辑驱动器名称,该枚举变量在Linux/Unix中将被忽略;
  • QDir::NoSymLinks 不列出符号链接;
  • QDir::NoDotAndDotDot 不列出文件系统中的特殊文件".“及”…";
  • QDir::NoDot 不列出"."文件,即指向当前目录的软链接
  • QDir::NoDotDot 不列出"…"文件,即指向上级目录的软链接;
  • QDir::AllEntries 其值为Dirs | Files | Drives,列出目录、文件、驱动器及软链接等所有文件;
  • QDir::Readable 列出当前应用有读权限的文件或目录;
  • QDir::Writable 列出当前应用有写权限的文件或目录;
  • QDir::Executable 列出当前应用有执行权限的文件或目录;
  • Readable、Writable及Executable均需要和Dirs或Files枚举值联合使用;
  • QDir::Modified 列出已被修改的文件,该值在Linux/Unix系统中将被忽略;
  • QDir::Hidden 列出隐藏文件;
  • QDir::System 列出系统文件;
  • QDir::CaseSensitive 设定过滤器为大小写敏感
    举例如下:
    QStringList dirNames = dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot);//返回的是dir当前目录下的所有子目录
    QStringList fileNames = dir.entryList(QDir::Files | QDir::NoDotAndDotDot);//返回的是dir当前目录下的所有文件,不包含当前目录下子目录里文件

目录文件删除

bool QDir::removeRecursively();//删除当前目录及其目录下的文件,成功返回true,失败返回false

bool remove(const QString &fileName);//根据文件名称删除当前目录的文件

bool QDir::rmdir(const QString &dirName) const;//根据当前目录名称删除当前目录,注意:使用该函数必须保证当前目录为空,没有文件

bool QDir::rmpath(const QString &dirPath) const;//根据当前目录名称删除当前目录下的所有子目录,注意:使用该函数必须保证当前目录下的子目录为空,没有文件

QFileInfo类

QFilelnfo类提供了与系统无关的文件信息,包括文件的名称、在文件系统中的位置(路径)、文件的访问权限以及是否是一个目录或者符号链接等 。QFilelnfo也可以获取文件的大小和最近一次修改/读取的时间,还可以获取Qt资源的相关信息 。 QFilelnfo指向的文件可以在QFileinfo对象构建时设置,或者以后使用setFile()来设置

  • QFileInfo可以使用相对(relative)路径或者绝对(absolute)路径来指向一个文件,还可以使用makeAbsolute()来将一个相对路径转换为绝对路径
  • 文件的类型可以使用isFile()、isDir()和isSymLink()来获取。 可以分别使用path()和fileName()来获取文件的路径和文件名,还可以使用baseName()来获取文件名中的基本名称,使用suffix()来获取文件名的后缀,使用completeSuffix()来获取复合后缀
  • 文件的日期可以使用created()、lastModified()和lastRead()来返回
  • 访问权限可以使用isReadable()、isWritable()和isExecutable()来获取
  • 文件的所有权可以使用owner()、ownerId()、group()和groupId()来获取

QFileInfo类是Qt中用于文件和目录操作的常用类之一,可用于创建、修改或删除文件和目录,或处理文件和目录的元数据。

常用函数如下:

判断函数

bool isAbsolute() ;//文件路径是否绝对路径。
注意:以冒号 (😃 开头的路径始终被视为绝对路径,因为它们表示 QResource

bool isDir() ;//对象是否指向目录或指向目录的符号链接。

bool isFile() ;//对象是否指向文件或指向文件的符号链接。如果文件是符号链接,并且目标是常规文件,则此函数返回 true。

其他函数

QFileInfo(const QDir &dir, const QString &file);//构造一个 QFileInfo,它提供有关给定file相对于目录 dir 的信息。

  • 如果 dir 是相对路径,则 QFileInfo 也将具有相对路径。
  • 如果 file 是绝对路径,则 dir 指定的目录将被忽略。
    QFileInfo(const QString &file);//构造一个 QFileInfo,提供有关给定文件的信息。该文件可以是绝对或相对路径。

QString absoluteFilePath() ;//返回包含文件名的绝对路径绝对路径名由完整路径和文件名组成如果是调用的QDir::entryInfoList函数且过滤器是QDir::Dirs返回的QFileInfoList(说明都是当前目录下的子目录),每一个FileInfo调用absoluteFilePath,返回的是当前目录下的一个子目录路径(此时子目录可以看成是一个文件),调用absolutePath返回的是当前目录路径,调用fileName函数是当前目录下的一个子目录名称

  • 在 Unix 上,这将始终以根目录“/”开头。
  • 在 Windows 上,这将始终以“D:/”开头,其中 D 是驱动器号,但未映射到驱动器号的网络共享除外(在这种情况下,路径将以“//sharename/”开头)。驱动器号将大写。

QString absolutePath() ;//返回文件的路径绝对路径这不包括文件名

  • 在 Unix 上,绝对路径将始终以根目录“/”开头。
  • 在 Windows 上,这将始终以“D:/”开头,其中 D 是驱动器号,但未映射到驱动器号的网络共享除外(在这种情况下,路径将以“//sharename/”开头)。

QDir dir();//以 QDir 对象的形式返回对象的父目录的路径
注意:返回的 QDir 总是对应于对象的父目录,即使 QFileInfo 代表一个目录。

bool exists();//文件是否存在。
注意:如果文件是指向不存在文件的符号链接,则返回 false。

QString fileName() ;//返回文件的名称,不包括路径

QString filePath();//返回文件名,包括路径

QString baseName() const;//返回文件的基本名称(不包含后缀),如果QFileInfo用于目录的话,调用该函数返回的就是目录名

常用示例

默认访问桌面文件夹

举例:默认访问桌面的picture文件夹
QByteArray qgetenv(const char *varName);//用于获取环境变量的值。环境变量是在操作系统中定义的一些全局变量,用于存储系统配置和运行时信息。调用qgetenv(“USER”)函数可获取电脑用户名
具体代码如下:

QString userName = qgetenv("USER");
if(userName.isEmpty())
{
   
   
	userName = qgetenv("USERNAME");
}
QString strPath = "C:/Users/"+userName+"/Desktop/picture/";//piture文件夹
QDir dir(strPath);

定时处理某文件夹下的子目录及其文件

举例:每天凌晨0点处理桌面文件夹picture的子目录及其文件(根据生成日期只保留最近15天的文件)
逻辑思路:定时器+删除文件的函数
在主线程初始化删除文件定时器,具体函数如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值