• 12700阅读
  • 14回复

QT里怎么检索某一个目录下的所有文件? [复制链接]

上一主题 下一主题
离线darlings
 

只看楼主 倒序阅读 楼主  发表于: 2010-03-18
就像MFC里的CFileFind,在QT里用MFC的类很麻烦,不知道QT提供这样的类么?
离线dbzhang800

只看该作者 1楼 发表于: 2010-03-18
QDir
离线午小夜

只看该作者 2楼 发表于: 2010-03-18
QStringList    QDir::entryList ( const QStringList & nameFilters, Filters filters = NoFilter, SortFlags sort = NoSort ) const
[操作系统版本]  Windows XP;Linux Ubuntu;Linux Fedora;
[Qt SDK版本]    4.7.0
[SDK 发布日期]  2010.05
[IDE(集成开发环境)] QtCreator
个人网页:http://hi.baidu.com/午小夜
學歷:Royal Jalidon
离线darlings

只看该作者 3楼 发表于: 2010-03-18
有几点没看懂,先addSearchPath,完了再searchPaths,然后路径下把有的文件就存在list里了?
离线xlttap

只看该作者 4楼 发表于: 2010-03-18
楼主是想实现一个这样的效果吧(自己写的一个文件浏览器):

关键代码:
    QDir flc(fileLocationComboBox->currentText());
    QStringList sl = flc.entryList(QDir::AllDirs | QDir::Files | QDir::NoDotAndDotDot);
我简单我快乐
离线darlings

只看该作者 5楼 发表于: 2010-03-18
引用第4楼xlttap于2010-03-18 14:11发表的  :
楼主是想实现一个这样的效果吧(自己写的一个文件浏览器):
[图片]
关键代码:
    QDir flc(fileLocationComboBox->currentText());
    QStringList sl = flc.entryList(QDir::AllDirs | QDir::Files | QDir::NoDotAndDotDot);

不是啦,我是想做一个上传功能,就是指定路径下的所有文件上传到远程服务器上。
以前用MFC这个功能倒是好弄,现在用QT有点头疼。
离线xlttap

只看该作者 6楼 发表于: 2010-03-18
那也一样啊,我做文件浏览器时也要检索指定路径下的所有文件啊,要不我怎么能把该路径下文件都显示在浏览器中啊。
我简单我快乐
离线darlings

只看该作者 7楼 发表于: 2010-03-18
引用第6楼xlttap于2010-03-18 14:24发表的  :
那也一样啊,我做文件浏览器时也要检索指定路径下的所有文件啊,要不我怎么能把该路径下文件都显示在浏览器中啊。

是不是要设置filter为*.*?然后再setPath一个指定的路径?
离线xlttap

只看该作者 8楼 发表于: 2010-03-18
如果你要上传的是路径下的所有文件,就不用设置filter
我简单我快乐
离线darlings

只看该作者 9楼 发表于: 2010-03-18
引用第6楼xlttap于2010-03-18 14:24发表的  :
那也一样啊,我做文件浏览器时也要检索指定路径下的所有文件啊,要不我怎么能把该路径下文件都显示在浏览器中啊。

试了一下,代码可行,呵呵,但是不知道怎么检索子文件夹下的文件呢?用你那个代码得到的好像是当前目录下文件和文件夹的路径。
离线xlttap

只看该作者 10楼 发表于: 2010-03-18
呵呵,那你就要自己去判断路径下哪些是文件,哪些是文件夹了。是文件夹的话,再读取其内容。用递归试试,参考rmdir -v folder 命令
我简单我快乐
离线darlings

只看该作者 11楼 发表于: 2010-03-18
引用第10楼xlttap于2010-03-18 15:28发表的  :
呵呵,那你就要自己去判断路径下哪些是文件,哪些是文件夹了。是文件夹的话,再读取其内容。用递归试试,参考rmdir -v folder 命令

MFC里用的就是递归,但是QT里怎么判断是文件夹还是文件呢?
离线xlttap

只看该作者 12楼 发表于: 2010-03-18
用QFileInfo去判断。
我简单我快乐
离线darlings

只看该作者 13楼 发表于: 2010-03-18
引用第12楼xlttap于2010-03-18 16:51发表的  :
用QFileInfo去判断。

谢谢,一会写个递归试试,不行的话明天再来请教。
离线sunyuanchao
只看该作者 14楼 发表于: 2010-03-30
QStringList nameFilters;
nameFilters << "*.erm" << "*.ers";
QDirIterator dirIterator(path, nameFilters, QDir::Files | QDir::NoSymLinks | QDir::NoDotAndDotDot, QDirIterator::Subdirectories);
while(dirIterator.hasNext())
{
    fileList << dirIterator.fileName();
    dirIterator.next();
}
不用自己写递归,详见QDirIterator Class Reference.
快速回复
限100 字节
 
上一个 下一个