知识-QT读取本地文件夹内容

内容纲要

QT读取本地文件夹

读取本地单个文件

QString file = QFileDialog::getOpenFileName(0, tr("Open a qds file"));

读取本地多个文件

QStringList files = QFileDialog::getOpenFileNames(
                        this,
                        "Select one or more files to open",
                        "/home",
                        "Images (*.png *.xpm *.jpg)");

读取本地目录下的文件

void PlayList::openFolders()
{
    setPlayListFilePath();
    clearList();
    LoadAllFiles(PLAY_PATH);
}
void PlayList::setPlayListFilePath()
{
    QString file = QFileDialog::getExistingDirectory();
    if(file.isEmpty())
        return;
    PLAY_PATH = file;
    emit play_pathChanged(PLAY_PATH);
}
void PlayList::LoadAllFiles(const QString &path)
{
    // TODO: add url;
    QFileInfoList files = getFileList(path);
    if (files.isEmpty())
        return;
    // TODO: check playlist file: m3u, pls... In another thread
    for (int i = 0; i < files.size(); ++i) {
        QFileInfo file = files.at(i);
        //qDebug()<< file << endl;
        if (!file.isFile())
            continue;
        insert(file.absoluteFilePath(), i);
    }
}
QFileInfoList PlayList::getFileList(const QString &path)
{
    QDir dir(path);

    //QStringList nameFilters;
    //nameFilters << "*.mp4" << "*.avi" <<"*.flv"
    //            << "*.yuv" << "*.mpg" <<"*.gif";
    //dir.setNameFilters(nameFilters);
    //获取文件列表
    //QStringList files = dir.entryList(nameFilters,QDir::Files|QDir::Readable, QDir::Name);
    //获取文件信息

    QFileInfoList file_list = dir.entryInfoList(QDir::Files | QDir::Hidden | QDir::NoSymLinks);
    //QFileInfoList folder_list = dir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot);
    //以下为获取子目录文件信息
        //    for (int i = 0; i != folder_list.size(); i++) {
        //        QString name = folder_list.at(i).absoluteFilePath();
        //        QFileInfoList child_file_list = GetFileList(name);
        //        file_list.append(child_file_list);
        //    }
    return file_list;
}

查找目录下某类型的所有文件信息

QFileInfoList PlayList::getFileList(const QString &path)
{
    QDir dir(path);

    QStringList nameFilters;
    nameFilters << "*.mp4" << "*.avi" <<"*.flv"
                << "*.yuv" << "*.mpg" <<"*.gif";
    dir.setNameFilters(nameFilters);
    //获取文件列表
    //QStringList files = dir.entryList(nameFilters,QDir::Files|QDir::Readable, QDir::Name);
    //获取文件信息

    QFileInfoList file_list = dir.entryInfoList(nameFilters,QDir::Files | QDir::Hidden | QDir::NoSymLinks);
    QFileInfoList folder_list = dir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot);
    //以下为获取子目录文件信息
        //    for (int i = 0; i != folder_list.size(); i++) {
        //        QString name = folder_list.at(i).absoluteFilePath();
        //        QFileInfoList child_file_list = GetFileList(name);
        //        file_list.append(child_file_list);
        //    }
    return file_list;
}

查找目录下某类型的所有文件名称

QStringList testClass::findFiles(const QString &startDir, QStringList filters)
{
    QStringList names;
    QDir dir(startDir);

    //搜索当前目录符合条件的文件
    foreach (QString file, dir.entryList(filters, QDir::Files))
        names += startDir + '/' + file;

    //搜索当前目录的子目录符合条件的文件
    foreach (QString subdir, dir.entryList(QDir::AllDirs | QDir::NoDotAndDotDot))
        names += findFiles(startDir + '/' + subdir, filters);

    return names;
}

函数调用方式

QStringList files = findFiles("./", QStringList() << "*.cpp" << "*.h");

其他转换

  • QFileInfo fileinfo(url.path()); //QUrl转换为QFileinfo
  • QDateTime::FromString(str,"yyyy-MM-dd hh:mm:ss"); //QString转换QDateTime

发表评论