精华内容
下载资源
问答
  • QDir过滤文件的坑

    千次阅读 2019-05-03 10:18:29
    QString qtVersionPath = PROGRAMS_PATH + m_qtVersion...QDir dir(qtVersionPath); dir.cd(m_qtVersion.mid(3)); qDebug()<<dir.path(); m_compilerVersionList = dir.entryList(dir.filter() | QDir::NoDotA...

    以QDir过滤文件为例,怎么正确过滤...的目录。

    错误做法

    QStringList files = dir.entryList(QDir::NoDotAndDotDot);
    

    正确做法

    QStringList files = dir.entryList(dir.filter() | QDir::NoDotAndDotDot);
    

    QDir::Filters

    • 此枚举描述QDir可用的筛选选项; 使用在entryList()entryInfoList()
    • 过滤器值是通过使用按位或运算符组合的值来指定的。
    展开全文
  • QDir文件操作

    2015-09-02 11:59:18
    在QT中使用QDir类实现界面文件操作 因随便写的 代码注释较少 如果能够给不熟悉的人带来一些便利 我很开心 ~-~
  • Qdir

    千次阅读 2018-07-09 09:47:45
    关于Qt操作文件夹、文件的知识用途较多,比如... 首先看简单的:一、Qt遍历文件夹下一层的文件:方式1:void ImageTree::addFolderImages(QString path){//判断路径是否存在QDir dir(path);if(!dir.exists()){retur...
    关于Qt操作文件夹、文件的知识用途较多,比如遍历下一层乃至所有子孙文件、文件夹,获取它们的一些信息(大小、类型、最后更改时间等)。当然,也可以进行级联删除。 首先看简单的:
    
    一、Qt遍历文件夹下一层的文件:
    方式1:
    void ImageTree::addFolderImages(QString path)
    {
    //判断路径是否存在
    QDir dir(path);
    if(!dir.exists())
    {
    return;
    }
    dir.setFilter(QDir::Files | QDir::NoSymLinks);
    QFileInfoList list = dir.entryInfoList();
    int file_count = list.count();
    if(file_count <= 0)
    {
    return;
    }
    QStringList string_list;
    for(int i=0; i
    {
    QFileInfo file_info = list.at(i);
    QString suffix = file_info.suffix();
    if(QString::compare(suffix, QString('png'), Qt::CaseInsensitive) == 0)
    {
    QString absolute_file_path = file_info.absoluteFilePath();
    string_list.append(absolute_file_path);
    }
    }
    }
    分析:遍历文件的下一层,对于系统而言包括:文件夹、文件、快捷方式,使用setFilter即可过滤。通过entryInfoList则可以获取过滤后所得到的文件夹下的文件信 息列表,遍历文件通过操作QFileInfo可得到所需的文件详细信息(大小、类型、后缀等)。
    方式2:
    void ImageTree::addFolderImages(QString path)
    {
    //判断路径是否存在
    QDir dir(path);
    if(!dir.exists())
    {
    return;
    }
    QStringList filters;
    filters<<QString('*.jpeg')<<QString('*.jpg')<<QString('*.png')<<QString('*.tiff')<<QString('*.gif')<<QString('*.bmp');
    dir.setFilter(QDir::Files | QDir::NoSymLinks); //设置类型过滤器,只为文件格式
    dir.setNameFilters(filters); //设置文件名称过滤器,只为filters格式(后缀为.jpeg等图片格式)
    int dir_count = dir.count();
    if(dir_count <= 0)
    {
    return;
    }
    QStringList string_list;
    //获取分隔符
    //QChar separator = QDir::separator();
    QChar separator = QChar('/');
    if(!path.contains(separator))
    {
    separator = QChar('\\');
    }
    QChar last_char = path.at(path.length()-1);
    if(last_char == separator)
    {
    separator = QChar();
    }
    for(uint i=0; i
    {
    QString file_name = dir[i]; //文件名称
    QString file_path = path + separator + file_name; //文件全路径
    string_list.append(file_path);
    }
    //string_list 添加完成之后,就可以查看list中的文件路径了
    }
    分析:setNameFilters顾名思义,就是过滤文件名称的。如果只需要获取指定路径下的文件名,则可去掉“获取分隔符”部分代码(因为我是为了获取文件的全路径)。
    思考:QDir::separator()这是用于获取分隔符的,调试过程中发现path的分隔符为'/',奇怪的是获取到的为'\\',刚好相反,所以我通过contains的方式获取分隔符的(无非'/'与'\\')。
    讨论:如果设定filters后,那么存在一定的问题。熟用Windows的应该都知道,文件名是忽略大小写的(包括扩展名),那么若filters设定了“*.jpg”之后,则就不可添加扩展名为“.JPG”、“.Jpg”等大小写兼有的文件了。
    既然有问题,就有解决问题的方式。
    1、问题来源是由扩展名引起,那么去掉setNameFilters(filters);
    2、上述已经获取文件全路径,那么QFileInfo file_info(file_path)获取文件信息的对象
    3、通过file_info.suffix()或者completeSuffix()来判定文件的后缀、扩展名
    4、获取之后比较时忽略大小写即可。如:QString::compare(suffix, QString('*.jpeg'), Qt::CaseInsensitive) == 0
    总结:通过以上两种方式比较,关于遍历下一层的方式,采用“方式1”较好。
    二、级联遍历文件夹及其子孙文件夹中的文件
    方式1:
    void ImageTree::addSubFolderImages(QString path)
    {
    //判断路径是否存在
    QDir dir(path);
    if(!dir.exists())
    {
    return;
    }
    //获取所选文件类型过滤器
    QStringList filters;
    filters<<QString('*.jpeg')<<QString('*.jpg')<<QString('*.png')<<QString('*.tiff')<<QString('*.gif')<<QString('*.bmp');
    //定义迭代器并设置过滤器
    QDirIterator dir_iterator(path,
    filters,
    QDir::Files | QDir::NoSymLinks,
    QDirIterator::Subdirectories);
    QStringList string_list;
    while(dir_iterator.hasNext())
    {
    dir_iterator.next();
    QFileInfo file_info = dir_iterator.fileInfo();
    QString absolute_file_path = file_info.absoluteFilePath();
    string_list.append(file_path);
    }
    }
    分析:QDirIterator定义过程中可设置过滤器,包括:文件名称、文件类型等。dir_iterator.next()这句话很重要,如果缺少将会进入死循环!
    方式2:
    QStringList string_list;
    void ImageTree::addSubFolderImages(QString path)
    {
    QDir dir(path);
    if(!dir.exists())
    {
    return;
    }
    dir.setFilter(QDir::Dirs | QDir::Files | QDir::NoSymLinks);
    dir.setSorting(QDir::DirsFirst);
    QFileInfoList list = dir.entryInfoList();
    int i = 0;
    bool is_dir;
    do
    {
    QFileInfo file_info = list.at(i);
    if(file_info.fileName() == '.' | file_info.fileName() == '..')
    {
    i++;
    continue;
    }
    is_dir = file_info.isDir();
    if(is_dir)
    {
    //进行递归
    addSubFolderImages(file_info.filePath());
    }
    else
    {
    //获取文件后缀并获取所选包含类型,若存在包含类型且后缀相同,则添加
    QString suffix = file_info.suffix();
    if(QString::compare(suffix, QString('png'), Qt::CaseInsensitive) == 0)
    {
    QString absolute_file_path = file_info.absoluteFilePath();
    string_list.append(absolute_file_path);
    }
    }
    i++;
    }
    while(i
    }
    分析:此方式采用递归的思路解决,也是网上大多数人用的办法,个人建议摒弃!递归的效率真心不敢接受,而且代码看起来也费劲。
    总结:通过以上两种方式比较,关于遍历子孙文件夹的方式,采用“方式1”较好。
    关于QFileInfo获取文件信息的方法可以查看API
    方法如下:
    void setFile(const QString &file);
    void setFile(const QFile &file);
    void setFile(const QDir &dir, const QString &file);
    bool exists() const;
    void refresh();
    QString filePath() const;
    QString absoluteFilePath() const;
    QString canonicalFilePath() const;
    QString fileName() const;
    QString baseName() const;
    QString completeBaseName() const;
    QString suffix() const;
    QString bundleName() const;
    QString completeSuffix() const;
    QString path() const;
    QString absolutePath() const;
    QString canonicalPath() const;
    QDir dir() const;
    QDir absoluteDir() const;
    bool isReadable() const;
    bool isWritable() const;
    bool isExecutable() const;
    bool isHidden() const;
    bool isNativePath() const;
    bool isRelative() const;
    inline bool isAbsolute() const { return !isRelative(); }
    bool makeAbsolute();
    bool isFile() const;
    bool isDir() const;
    bool isSymLink() const;
    bool isRoot() const;
    bool isBundle() const;
    QString readLink() const;
    inline QString symLinkTarget() const { return readLink(); }
    QString owner() const;
    uint ownerId() const;
    QString group() const;
    uint groupId() const;
    bool permission(QFile::Permissions permissions) const;
    QFile::Permissions permissions() const;
    qint64 size() const;
    QDateTime created() const;
    QDateTime lastModified() const;
    QDateTime lastRead() const;
    bool caching() const;
    void setCaching(bool on);
    更多关于获取文件图标、类型的详细信息请查看:
    Qt之QFileIconProvider(获取文件图标、类型)。 Qt之QFileIconProvider续(获取文件图标、类型)
    展开全文
  • FilePath = QFileDialog::getOpenFileName(this, tr("Open Binary File"), ".", tr("All files (*.*);;Images (*.jpg *.jpeg *.tif ...qt文件过滤,qt文件类型过滤 qt限定文件类型,qt筛选文件类型,qt文件选择框
        FilePath = QFileDialog::getOpenFileName(this,
                                                tr("Open Binary File"),
                                                ".",
                                                tr("All files (*.*);;Images (*.jpg *.jpeg *.tif *.bmp *.png);;Binary File(*.bin *.txt *.hex);;\
                                                   execulate (*.exe *.com *.pe)"));
    

    qt文件过滤,qt文件类型过滤
    qt限定文件类型,qt筛选文件类型,qt文件选择框

    展开全文
  • 文件系统的浏览是目录操作的一个常用功能,下面通过程序,实现一个能够显示所有文件的浏览功能。 讲一讲如何使用QDir类以及各种过滤方式显示文件列表。

    前言:

    文件系统的浏览是目录操作的一个常用功能,下面通过程序,实现一个能够显示所有文件的浏览功能。

    讲一讲如何使用QDir类以及各种过滤方式显示文件列表。


    效果图:



    实现步骤:

    1、新建工程

    工程名默认即可,基类为QDialog。


    2、打开“dialog.h”文件

    在“dialog.h”文件中添加如下代码:

    #ifndef DIALOG_H
    #define DIALOG_H
    
    #include <QDialog>
    #include <QFileInfoList>
    #include <QListWidgetItem>
    #include <QDir>
    #include <QVBoxLayout>
    #include <QLineEdit>
    
    class Dialog : public QDialog
    {
        Q_OBJECT
    
    public:
        Dialog(QWidget *parent = 0);
        ~Dialog();
        void showFileInfoList(QFileInfoList list);
    
    public slots:
        void slotShow(QDir dir);
        void slotDirShow(QListWidgetItem *item);
    
    private:
        QLineEdit *fileLineEdit;
        QListWidget *fileListWidget;
    
        QVBoxLayout *mainLayout;
    };
    
    #endif // DIALOG_H
    


    3、打开“dialog.cpp”文件

    添加如下代码:

    #include "dialog.h"
    
    Dialog::Dialog(QWidget *parent)
        : QDialog(parent)
    {
        setWindowTitle(tr("File View"));
        fileLineEdit = new QLineEdit(tr("/"));
        fileListWidget = new QListWidget;
    
        mainLayout = new QVBoxLayout(this);
        mainLayout->addWidget(fileLineEdit);
        mainLayout->addWidget(fileListWidget);
    
        connect(fileLineEdit,SIGNAL(returnPressed()),this,SLOT(slotShow(QDir)));
        connect(fileListWidget,SIGNAL(itemDoubleClicked(QListWidgetItem*)),
                this,SLOT(slotDirShow(QListWidgetItem*)));
    
        QString root = "C:";    //可以更改盘符
        QDir rootDir(root);
        QStringList string;
        string<<"*";
        QFileInfoList list = rootDir.entryInfoList(string);
        showFileInfoList(list);
    }
    
    Dialog::~Dialog()
    {
    
    }
    
    void Dialog::slotShow(QDir dir)
    {
       QStringList string;
       string<<"*";
       QFileInfoList list = dir.entryInfoList(string, QDir::AllEntries , QDir::DirsFirst);
       showFileInfoList(list);
    }
    
    void Dialog::showFileInfoList(QFileInfoList list)
    {
        fileListWidget->clear();
        for(unsigned int i=0; i<list.count() ;i++)
        {
            QFileInfo tmpFileInfo = list.at(i);
            if(tmpFileInfo.isDir())
            {
                QIcon icon("dir.png");
                QString fileName = tmpFileInfo.fileName();
                QListWidgetItem *tmp = new QListWidgetItem(icon, fileName);
                fileListWidget->addItem(tmp);
            }
            else if(tmpFileInfo.isFile())
            {
                QIcon icon("file.png");
                QString fileName = tmpFileInfo.fileName();
                QListWidgetItem *tmp = new QListWidgetItem(icon, fileName);
                fileListWidget->addItem(tmp);
            }
        }
    }
    
    void Dialog::slotDirShow(QListWidgetItem *item)
    {
        QString str = item->text();
        QDir dir;
        dir.setPath(fileLineEdit->text());
        dir.cd(str);
        fileLineEdit->setText(dir.absolutePath());
        slotShow(dir);
    }
    


    4、“main.cpp”中保持默认。

    运行效果前文所示。


    解析:

    1、QFileInfoList QDir::entryInfoList(const QStringList & nameFilters, Filters filters = NoFilter, SortFlags sort = NoSort) const

    此函数的返回值是一个QFileInfoList对象,包含当前目录下的所有文件和子目录。

    参数一:指定文件名的过滤方式。

    参数二:指定文件属性的过滤方式。如目录、文件、读写属性等。

    enum QDir::Filter的取值如下:



    参数三:指定列表的排序方式。如:按文件大小、文件类型、文件名称等。


    展开全文
  • QStringList files = dir.entryList(nameFilters, QDir::NoSymLinks|QDir::Dirs|QDir::Files|QDir::Readable|QDir::NoDotAndDotDot , QDir::Name); return files; } 2、迭代,获取目录下(包含子目录)下的所有...
  • Qt文件过滤

    千次阅读 2018-04-08 12:04:12
    Qt有一个功能:可以根据自定义的文件类型对路径下的文件进行过滤。 使用方法: 1.过滤目录下包括子目录内的文件 //获取所选文件类型过滤器 QStringList filters; filters &lt;&lt; QString("*....
  • Qt使用QDir类查找某目录下文件列表

    千次阅读 2019-04-30 16:46:55
    QString Path; //====需要查找的路径 QDir fileDir(Path); fileDir.setFilter(QDir::Files);//===设置过滤配置,接受文件 QFileInfoList fileInfoList =fileDir.entryInfoList(); QStringList fileList; ...
  • QT QDir

    2021-07-10 15:18:09
    QDir用于操作路径名、访问有关路径和文件的信息以及操作底层文件系统。它也可以用来访问Qt的资源系统。 Qt使用"/"作为通用的目录分隔符,就像在url中使用"/"作为路径分隔符一样。如果您总是使用“/”作为目录分隔符...
  • 1.entryInfoList()与entryList(),第一个函数会返回此文件加下所有文件及目录的完整信息,包括用户组,大小,访问时间,权限等等所有与文件有关的信息。而第二个方法只是返回此目录下的所有文件及目录的名字。 2....
  • 一、功能 删除文件夹以及多层文件夹下的所有内容 二、代码 bool qdirDeleteFolder::deleteDir(const QString &path) { if (path.isEmpty()){ ... QDir dir(path); if(!dir.exists()){ return ...
  • #include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : ... // 进行文件系统监视器的信号和槽的关联 connect(&m_fileSysWatcher, SIGNAL(directoryChanged(QString)),this,SLOT(s.
  • 使用QDir遍历指定目录下的指定文件

    千次阅读 2016-11-25 14:37:56
    使用QDir遍历指定目录下的指定文件
  • 下面代码的目的是获取TargetDir(某一特定目录)下的所有后缀为“stl”的文件的名称列表:void GetStlFileNameList( QDir Dir ,QFileInfoList &FileList) { QFileInfoList subFileList = Dir.entryInfoList(QDir::...
  • QDir::Files”,否则无法获取到文件列表,若需忽略“./,../”等,filter还需加上“QDir::NoDotAndDotDot”,或自行根据文件名,过滤!  注:获取文件名方法:QFileInfo(dirPath,fileName)
  • QDir 5.0.2

    千次阅读 2014-12-26 13:20:34
    可以指定过滤器 筛选 文件和文件夹等。。 QDir(const QDir &) QDir(const QString &) QDir(const QString &, const QString &, SortFlags, Filters) ~QDir() m_dir.setPath("abc");//对d重新赋值
  • Qt:文件操作QFile/QDir

    2020-05-09 14:18:28
    * @description: 文件信息 * @param {type} * @return: */ void file_info() { QFileInfo info = QFileInfo("filePath"); // 获取路径 QString file_name = info.fileName(); // 文件名 ...
  • 遍历一个路径文件夹和文件的代码,好使 文件遍历代码: .h: public:   ...void Wangpan::findFile(QString path)//若是盘里什么都没有的话这个程序就崩溃了// ... QDir dir(path);  if
  • QDir类的使用程序效果展示 程序 #include <QCoreApplication> #include <QDir> #include <QStringList> #include <QtDebug> qint64 du(const QString path) { QDir dir(path); qint64 ...
  • 其中QFile类便是用于文件操作的类 在QT中,将文件当做一种特殊的外部设备对待(比如:串口,usb等就是外部设备) QT中,IO操作相关的函数接口,常用以下几种 打开设备 bool open(OpenMode mode); //打开文件成功返回true,...
  • QDir

    2020-02-13 14:56:36
    QDir Class TheQDirclass provides access to directory structures and their contents.More... Header: #include <QDir> qmake: QT += core List of all members, including inherited membe...
  • QDir的使用

    2020-02-26 20:01:36
    关于QDir 通常我们使用QFileDialog来选择一个文件路径; 但是当我们需要打开指定文件时(如:选择一个文件路径,获取到文件中的内容)时,则需要使用QDir ... //过滤器,用来选择文件类型 QStringList fileLi...
  • qt QDir 枚举类型

    2019-08-01 19:03:17
    QDir中的Filter枚举变量 enum QDir::Filter 与 flags QDir::...QDir::AllDirs 0x400 列出所有目录,不对目录名进行过滤QDir::Files 0x002 列出文件QDir::Drives0x004 列出逻辑驱动器名称,该枚举变量在Linux/U...
  • 一、利用QDir获取目录下所有文件的文件名 QDir dir("D:/Files");//你的文件夹路径 dir.setFilter(QDir::NoDotAndDotDot | QDir::AllEntries);//过滤去除文件夹下的.目录与..目录 QStringList fileEntryList = dir....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 909
精华内容 363
关键字:

qdir文件过滤