Qt遍历文件夹下的文件、获取文件详细信息及执行文件操作

QDir:获取指定文件夹下的所有文件

示例代码

QString path = "xx/xx/xx/";
QDir dir(path);
if (!dir.exists()) {
	qInfo() << "dir is null";
	return;
}
//设置过滤器
dir.setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot);
dir.setSorting(QDir::Name | QDir::IgnoreCase); //按照名称排序

QDir 设置过滤器

QDir::Dirs - 显示文件夹
QDir::AllDirs - 显示所有文件夹
QDir::Files - 显示文件
QDir::NoDotAndDotDot - 不显示系统中的特殊文件,例如"."和".."
QDir::NoSymLinks - 不显示符号链接
QDir::Hidden - 显示隐藏文件
QDir::System - 显示系统文件
QDir::Drives - 显示逻辑驱动器名称,该值在Linux/Unix系统中将被忽略
QDir::NoDot - 不显示软链接文件,例如".文件"
QDir::NoDotDot - 不显示"..文件"
QDir::AllEntries - 又可以表示成Dirs | Files | Drives,显示目录,文件,驱动器及软链接等所有文件
QDir::Readable - 显示当前应用有读权限的文件或目录,需要和Dirs或Files枚举值联合使用
QDir::Writable - 显示当前应用有写权限的文件或目录,需要和Dirs或Files枚举值联合使用
QDir::Executable - 显示当前应用有执行权限的文件或目录,需要和Dirs或Files枚举值联合使用
QDir::Modified - 显示已被修改的文件,该值在Linux/Unix系统中将被忽略
QDir::CaseSensitive - 设定过滤器为大小写敏感。

QDir 设置排序

QDir::Name - 按名称排序
QDir::Time - 按时间排序(修改时间)
QDir::Size - 按文件大小排序
QDir::Unsorted - 不排序
QDir::SortByMask - Name、Time和Size的掩码
QDir::DirsFirst - 首先是目录,然后是文件
QDir::Reversed - 相反的排序顺序
QDir::IgnoreCase - 不区分大小写进行排序
QDir::DefaultSort - 内部标记

更多QDir资料

QDirIterator:迭代器,用于遍历文件列表

比起其他列表容器更方便管理
hasNext()用于判断文件/目录是否存在,存在返回true,反之则返回false
next()用户迭代器去取下个值
两者配合使用可以遍历整个迭代器

示例代码

QDirIterator iterator(dir);
while(iterator.hasNext()) {
	qInfo() << "iterator.fileName = " << iterator.fileName;
	iterator.next();
}

更多QDirIterator资料

QFileInfo:获取文件详细信息

示例代码

QDirIterator iterator(dir);
while(iterator.hasNext()) {
	QFileInfo info(iterator.next());
	QString name = info.fileName(); //获取文件名
	QString fileName = info.filePath(); //文件目录+文件名
	//获取文件时间
	QDateTime time = info.created(); //文件创建时间
	QDateTime time2 = info.lastModified(); //文件最近修改时间
	QDateTime time3 = info.lastRead(); //文件最近读时间
	QString strTime = time.toString("yyyy-MM-dd hh:mm:ss");
	qInfo() << "name = " << name << "fileName = " << fileName << "strTime = " << strTime;
	//XXX
}

QFileInfo类更多接口

获取文件类型:
isFile(), isDir(), isSymLink()
获取权限:
isReadable(), isWritable(), isExecutable()
获取所有者:
ower(), owerId(), group(), groupId(), permissions(),
permission(QFile::Permissions permissions)
获取文件前缀名
baseName()
获取文件的完整前缀名
completeBaseName()
获取文件后缀名
suffix()
获取文件的完整后缀名
completeSuffix()
获取所有文件名
entryList()

更多QFileInfo资料

读写文件

示例代码

写文件

QFile file(fileName);
if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
	return;
QTextStream out(&file);
out << "hello world";

读文件

QFile file(fileName);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
	return;
QTextStream in(&file);
while (!in.atEnd()) {
	QString line = in.readLine();
	qInfo() << "line = " << line;
}	

更多QFile资料

文件夹操作:创建与删除

示例代码

创建文件夹

QFileInfo fileinfo("X/a.txt");
if (!fileinfo.exists()) {
	QDir().mkpath(fileinfo.absolutePath());
}

删除文件夹

if (dir.exists(name)) {
	dir.rmdir(name);
}

更多操作

刷新目录下内容
refresh()
重命名目录
rename()
删除文件
remove()
  • 9
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

离歌漠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值