一、采用递归和QDir实现文件夹下所有文件遍历的方法

#include <QDir>
bool FindFile(const QString & path)
{QDir dir(path);if (!dir.exists())return false;dir.setFilter(QDir::Dirs|QDir::Files);//除了目录或文件,其他的过滤掉dir.setSorting(QDir::DirsFirst);//优先显示目录QFileInfoList list = dir.entryInfoList();//获取文件信息列表int i = 0;bool bIsDir;do{QFileInfo fileInfo = list.at(i);if(fileInfo.fileName()=="."|fileInfo.fileName()==".."){i++;continue;}bIsDir = fileInfo.isDir();if (bIsDir){nFiles++;                //对文件属性进行处理//fileInfo.size(),fileInfo.fileName(),fileInfo.path()FindFile(fileInfo.filePath());}else{nFiles++;}i++;}while(i<list.size());
}

二、QT获取文件夹下所有文件数目及名字

path=QFileDialog::getExistingDirectory(NULL, tr("选择文件夹"),"D:\\",QFileDialog::ShowDirsOnly);QDir *dir=new QDir(path);QStringList filter;//filter<<"*.dat";//dir->setNameFilters(filter);QList<QFileInfo> *fileInfo=new QList<QFileInfo>(dir->entryInfoList(filter));

注释掉的两行是用来文件过滤用的,如果你要指定文件后缀名,这样写filter<<"*.dat"  就好了,如果要指定多个后缀名,这样写filter<<"*.dat"<<"*.txt"就行了

文件数目:fileInfo->count();

文件名称:fileInfo->at(i).fileName();

文件路径(包含文件名):fileInfo->at(i).filePath();

三、Qt遍历目录获取文件信息

QFileInfo
获取文件信息:文件名称,路径,大小,创建时间,修改时间,权限等
使用
路径:
UNIX: /home/dipper/file1
Windows: C://dipper//file1

构造函数:
QFileInfo fileInfo(path);
QFileInfo fileInfo;
fileInfo.setFile(path);

exists(): 判断文件是否存在
size(): 获取文件大小

文件类型:
isFile(), isDir(), isSymLink()

symLinkTarget(): 返回符号链接的文件

注意:
UNIX和Windows(快捷方式)对符号链接处理不一样
UNIX: size()返回链接的目标文件的大小
Windows: size()返回链接文件本身的大小

#ifdef Q_OS_UNIXQFileInfo info1("/home/bob/bin/untabify");
info1.isSymLink();          // returns true
info1.absoluteFilePath();   // returns "/home/bob/bin/untabify"
info1.size();               // returns 56201
info1.symLinkTarget();      // returns "/opt/pretty++/bin/untabify"QFileInfo info2(info1.symLinkTarget());
info1.isSymLink();          // returns false
info1.absoluteFilePath();   // returns "/opt/pretty++/bin/untabify"
info1.size();               // returns 56201#endif
#ifdef Q_OS_WINQFileInfo info1("C://Documents and Settings//Bob//untabify.lnk");
info1.isSymLink();          // returns true
info1.absoluteFilePath();   // returns "C:/Documents and Settings/Bob/untabify.lnk"
info1.size();               // returns 743
info1.symLinkTarget();      // returns "C:/Pretty++/untabify"QFileInfo info2(info1.symLinkTarget());
info1.isSymLink();          // returns false
info1.absoluteFilePath();   // returns "C:/Pretty++/untabify"
info1.size();               // returns 63942#endif

path(): 返回文件路径
fileName(): 返回文件名称

QFileInfo fileInfo("/home/dipper/xyz.tar.gz");
fileInfo.path(); // returns "/home/dipper"
fileInfo.fileName(); // returns "xyz.tar.gz"
fileInfo.baseName(); // returns "xyz"
fileInfo.completeBaseName(); // returns "xyz.tar"
fileInfo.suffix();   // returns "gz"
fileInfo.completeSuffix(); // returns "tar.gz"

日期相关:
created(): 创建时间
lastModified(): 最近修改时间
lastRead(): 最近读时间

权限:
isReadable(), isWritable(), isExecutable()

所有者:
ower(), owerId(), group(), groupId(), permissions(), 
permission(QFile::Permissions permissions)

dir():  返回父目录
下面三个都返回"~/examples/191697"
QFileInfo fileInfo1("~/examples/191697/.");
QFileInfo fileInfo2("~/examples/191697/..");
QFileInfo fileInfo3("~/examples/191697/main.cpp");

下面三个都返回"."
QFileInfo fileInfo4(".");
QFileInfo fileInfo5("..");
QFileInfo fileInfo6("main.cpp");

相对路径和绝对路径
QString absolute = "/local/bin";
QString relative = "local/bin";
QFileInfo absFile(absolute);
QFileInfo relFile(relative);

QDir::setCurrent(QDir::rootPath());
// absFile and relFile now point to the same file

QDir::setCurrent("/tmp");
// absFile now points to "/local/bin",
// while relFile points to "/tmp/local/bin"

QDir 显示文件系统目录

实例:文件浏览器

//fileviewer.h
#ifndef FILEVIEWER_H
#define FILEVIEWER_H#include <QtGui>class FileViewer : public QDialog        // file information dialogs widget
{
Q_OBJECT
public:
FileViewer(QWidget *parent=0);
~FileViewer();
public:
QLineEdit* currDir;
QListWidget* fileListWidget;public:
void showFileInfoList(QFileInfoList list);public slots:
void showDir(QListWidgetItem * item);
void showFiles(QDir dir);
void showFiles();
};#endif // FILEVIEWER_H
//fileviewer.cpp
#include "fileviewer.h"FileViewer::FileViewer(QWidget *parent)
: QDialog(parent)
{  setWindowTitle(tr("File Viewer"));currDir = new QLineEdit;currDir->setText("c://");//currDir->setReadOnly(true);fileListWidget = new QListWidget;QVBoxLayout *vbLayout = new QVBoxLayout(this);vbLayout->addWidget(currDir);vbLayout->addWidget(fileListWidget);connect(currDir, SIGNAL(returnPressed()),this, SLOT(showFiles()));connect(fileListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem *)),this, SLOT(showDir(QListWidgetItem *)));QString root = "c://";QDir rootDir(root);QStringList strings;strings << "*" ;QFileInfoList list = rootDir.entryInfoList(strings);showFileInfoList(list);
}FileViewer::~FileViewer()
{}//显示文件信息列表
void FileViewer::showFileInfoList(QFileInfoList list)
{fileListWidget->clear();for(int i=0; i<list.count(); i++){QFileInfo tmpFileInfo = list.at(i);if((tmpFileInfo.isDir())){QIcon icon(":/images/dir.png");QString fileName = tmpFileInfo.fileName();QListWidgetItem *tmp = new QListWidgetItem(icon, fileName); //在列表上显示图标和名称fileListWidget->addItem(tmp);}else if(tmpFileInfo.isFile()){QIcon icon(":/images/file.png");QString fileName = tmpFileInfo.fileName();QListWidgetItem *tmp = new QListWidgetItem (icon, fileName);fileListWidget->addItem(tmp);}}
}void FileViewer::showDir(QListWidgetItem * item)
{
QString str = item->text();
QDir dir;
dir.setPath(currDir->text()); //设置目录
dir.cd(str); //切换到另一个目录
currDir->setText(dir.absolutePath());
showFiles(dir);
}void FileViewer::showFiles(QDir dir)
{
QStringList strings;
strings << "*" ;
QFileInfoList list = dir.entryInfoList(strings,   //文件名称过滤器,"*", "*.tar.gz"
QDir::AllEntries,  //文件属性过滤器,目录,文件,读写
QDir::DirsFirst  //排序方式,名称,修改时间,大小,目录优先
);
showFileInfoList(list);
}void FileViewer::showFiles()
{
QDir dir(currDir->text());
showFiles(dir);
}
//main.cpp
#include "fileviewer.h"
#include <QApplication>int main( int argc, char **argv )
{QFont font("ZYSong18030",12);QApplication::setFont(font);QApplication app(argc, argv);QTranslator translator;translator.load("fileviewer_zh","..");app.installTranslator(&translator);FileViewer *fileviewer = new FileViewer;fileviewer->show();return app.exec();
}

绝对路径
QDir("/home/user/Documents")
QDir("C:/Documents and Settings")

dirName(): 返回目录名称
QDir("Documents/Letters/Applications").dirName() // "Applications"
QDir().dirName()                                 // "."

切换目录:cd(str), cdUp()

创建,修改,删除:mkdir(), rename(), rmdir()

获取目录里面的文件,目录等
count(): 返回条目的数量
QStringList list = dir.entryList();
QFileInfoList fileInfoList = dir.entryInfoList();

静态函数
Dir        Qstring
current(), currentPath()
home(),    homePath()
root(),    rootPath()
temp(),    tempPath()

QDir dir("example");
if (!dir.exists())
qWarning("Cannot find the example directory");
//使用静态函数:QFile::exists("example");

遍历目录,读写文件

QDir dir = QDir::root();                 // "/"
if (!dir.cd("tmp")) {                    // "/tmp"qWarning("Cannot find the /"/tmp/" directory");
} else
{QFile file(dir.filePath("ex1.txt")); // "/tmp/ex1.txt"if (!file.open(QIODevice::ReadWrite))qWarning("Cannot create the file %s", file.name());
}

列出当前目录下所有文件,不包括符号链接,按大小排序,升序

#include <QDir>
#include <iostream>int main(int argc, char *argv[])
{QCoreApplication app(argc, argv);QDir dir;dir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks);dir.setSorting(QDir::Size | QDir::Reversed);QFileInfoList list = dir.entryInfoList();std::cout << "     Bytes Filename" << std::endl;for (int i = 0; i < list.size(); ++i) {QFileInfo fileInfo = list.at(i);std::cout << qPrintable(QString("%1 %2").arg(fileInfo.size(), 10).arg(fileInfo.fileName()));std::cout << std::endl;}return 0;
}

四、获取文件的(完整)后缀名和(完整)前缀名

获取文件前缀名

QFileInfo fi("/tmp/archive.tar.gz");
QString base= fi.baseName(); // base = "archive"

获取文件的完整前缀名

QFileInfo fi("/tmp/archive.tar.gz");
 QString base= fi.completeBaseName(); // base = "archive.tar"

获取文件后缀名

QFileInfo fi("/tmp/archive.tar.gz");
QString ext= fi.suffix();  // ext = "gz"

获取文件的完整后缀名

QFileInfo fi("/tmp/archive.tar.gz");
QString ext= fi.completeSuffix(); // ext = "tar.gz"

Qt总结之一:遍历文件夹和文件目录,并过滤和获取文件信息、后缀名、前缀名(一)相关推荐

  1. 【QT】遍历文件夹和文件目录,并过滤和获取文件信息、后缀名、前缀名

    [QT]遍历文件夹和文件目录,并过滤和获取文件信息.后缀名.前缀名 前言: 需要在特定目录或磁盘下查找特定文件 一.筛选目录 (一)单一目录下遍历,筛选特定文件 QDir dir("./Sa ...

  2. python批量新建文件夹_python批量创建指定名称的文件夹

    本文实例为大家分享了python批量创建指定名称的文件夹具体代码,供大家参考,具体内容如下 继删除多余文件之后,做了一些数据处理,需要重新保存数据,但文件夹的名称又不能改 所以只能创建新的文件夹,换个 ...

  3. python检测文件夹中新增文件_python检测文件夹变化,并拷贝有更新的文件到对应目录的方法...

    检测文件夹,拷贝有更新的文件到对应目录 2016.5.19 亲测可用,若有借鉴请修改下文件路径: 学习python小一个月后写的这个功能,属于初学,若有大神路过,求代码优化~ newcopy.py: ...

  4. java 文件递归删除文件夹_Java十行代码实现递归删除文件夹中所有文件

    递归删除文件夹中所有文件 要递归首先需要有方法.递归,即方法自己调用自己.一般在程序中很少使用,但在这个实现中,我们无法知道文件夹的深度,更无法根据深度来实现循环的嵌套. 递归两个重要条件: 终止边界 ...

  5. python读取多个文件夹_如何从python中的文件夹中读取多个NetCDF文件

    我试图绘制多年(1979-2014)的平均温度图,我唯一的问题是尝试从文件夹中读取多个NetCDF(.nc)文件.目前我的程序将绘制单个文件,但我不明白如何使其读取文件夹中的所有文件(每年一个).我想 ...

  6. 解放文件夹下所有层级的特定格式文件,找出文件夹内所有的txt/FLAC/MP4/MP3等等等等,并复制到另一个文件夹中

    解放文件夹下所有层级的特定格式文件,找出文件夹内所有的txt/FLAC/MP4/MP3等等等等,并复制到另一个文件夹中 引言 代码 得意 天天学习,好好向上 引言 各位朋友们好!最近遇到一些想要方便办 ...

  7. 服务器命令删除文件夹权限,icacls命令设置文件及其文件夹权限的方法,DAT批处理修改文件夹权限...

    bat的实例:@echo @echo y | icacls D:/Users /grant[:r] users:(D,WDAC) /T pause说明:由于修改文件夹或者文件权限,系统都是会询问的,所 ...

  8. Java将指定文件/文件夹压缩成zip、rar压缩文件

    import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipOutputStream;import java.io.*; ...

  9. linux教程如何创建文件夹,Linux教程之Linux mkdir 创建文件夹命令

    Linux(Ubuntu/Fedora/CentOS/RetHat)可以通过GMONE和KDE界面直接创建文件夹和文件目录.当然,有时候直接通过终端用 mkdir 命令来创建会更方便,特别是在Root ...

  10. 实时监测文件夹且根据条件自动删除指定文件夹下文件

    一.需求说明 当我们的项目开发完成部署到生产环境使用后,为了便于后续的运维工作(对问题及时排查和解决)在项目中编写了一些关于对异常情况或者实时数据自动生成对应的日志文件等内容,但是随着时间的流逝,这些 ...

最新文章

  1. Eclipse在高分屏下图标过小的解决方法
  2. R语言文本挖掘NASA数据网络分析,tf-idf和主题建模
  3. 算法提高课-搜索-DFS之连通性模型-AcWing 1112. 迷宫:dfs和bfs两种解法
  4. Anaconda conda常用命令
  5. 交换机工作原理_什么是POE交换机,它有什么好处?
  6. 查看selenium python的api小记录
  7. IOS开发之Swift学习笔记
  8. idea 新建的java项目没发run_IntelliJ IDEA创建普通的Java 项目及创建 Java 文件并运行的教程...
  9. 【转】ARM 之七 主流编译器(armcc、iar、gcc for arm、LLVM(clang))详细介绍
  10. 计算机设备的存放,计算机硬件储存设备与网络储存的发展现状
  11. 爱库存:已实名举报唯品会不正当竞争行为
  12. PDF文件编辑方法:PDF怎么插入图片背景
  13. PCB 18种特殊走线的画法与技巧!
  14. javaweb面试题2
  15. 【Excel学习笔记8】“定位”可以用来干嘛?
  16. javascript学习笔记-基础语法篇
  17. Smartbi数据报表系统,国内性价比最高的报表工具
  18. 正则表达式,前后非空,中间可空
  19. HCE知识盘点:大事记、NFC卡模拟、与SE兼容
  20. Java程序员入门Vue基础(一)

热门文章

  1. CentOS 5/6下安装Axel插件加速yum下载
  2. java项目不要用反射_面试官:Java 反射是什么?我回答不上来!
  3. Verilog实现独立按键消抖(状态机)
  4. mysql5.7版本的新特性_MySQL 5.7版本新特性(一)
  5. jupyter环境配置及使用
  6. springboot中如何创建定时任务,以及corn表达式规则
  7. data spring 指定时区_今天的工作内容:Spring Boot 2.X整合Spring-cache
  8. python公共变量声明_Python变量声明
  9. [版本1.11.4已修复]简书安卓UI界面Bug:主界面消失
  10. oracle——监听(二、sqlplus连接数据库)