Russian Qt Forum

Qt => Общие вопросы => Тема начата: Larrikin от Ноябрь 02, 2005, 12:55



Название: Рекурсивный перебор файлов в подпапках
Отправлено: Larrikin от Ноябрь 02, 2005, 12:55
Очередная трабла.
Не знаю с чем связана, но понять в чем проблема не могу :(
Вот функция:
Код:

/**************************************
* Рекурсивный перебор файлов и папок *
**************************************/
QStringList allFiles1; // Хранилище общего списка файлов
void getAllFiles1 (QString dir){
QString deb = "Check dir ";
deb.append(dir);
allFiles1 << deb;
QStringList myList; // Список файлов этой папки
QDir myDirectory = QDir(dir); // Текущая папка
myDirectory.setFilter(QDir::Files); // Фильтр - файлы
myList = myDirectory.entryList(); // Получить список
for (int i = 0; i < myList.count(); ++i){
allFiles1 << myDirectory.absoluteFilePath(myList[i]);
}
QStringList myList1; // Список папок этой папки
QDir myDirectory1 = QDir(dir); // Текущая папка
myDirectory1.setFilter(QDir::Dirs); // Фильтр - папки
myList1 = myDirectory1.entryList(); // Получить список
for (int i = 0; i < myList1.count(); ++i){
QDir myDir = QDir(myList1[i]);
if (myList1[i] == "." || myList1[i] == ".."){} // Если текущая или папка-владелец, то ничего не делаем
else {
QString t = "Enter directory ";
t.append(myDir.absolutePath());
allFiles1 << t;
getAllFiles1(myDir.absolutePath());
allFiles1 << "End check dir";
}
myDir = NULL;
}
myDirectory = NULL;
myDirectory1 = NULL;
myList.clear();
myList1.clear();
}

Так вот, файлы перебирает, но только в текущей папке и подпапках первого уровня :(. Дальше не заходит.
Прошу не пинать за стиль, я только начинаю программировать.


Название: Рекурсивный перебор файлов в подпапках
Отправлено: L.Marvell от Ноябрь 02, 2005, 18:12
Похожая тема была: http://prog.org.ru/forum/topic_1426.html
Может пригодится.


Название: Рекурсивный перебор файлов в подпапках
Отправлено: lepsai от Ноябрь 03, 2005, 02:03
можешь юзать: http://www.ku-soft.de/fdlist.html


Название: Рекурсивный перебор файлов в подпапках
Отправлено: Sergeich от Ноябрь 03, 2005, 05:09
Мля! Что за задача!!! Ни хуя не понятно... И кто тя учил так писать рекурсивные ф-ции!!?? Вобщем вот прога, рекурсивно выдающая файлы из директории начиная с текущей, мля... Задачу надо корректно ставить...  
Код:

#include <qstringlist.h>
#include <qdir.h>
#include <stdio.h>

QStringList getDirFiles( const QString& dirName  )
{
QDir dir( dirName );
if ( !dir.exists() ) qFatal( "No such directory : %s", dir.dirName().latin1() );
QStringList fileNames;
QStringList fileList = dir.entryList( QDir::Files );
for ( QStringList::Iterator fit = fileList.begin(); fit != fileList.end(); ++fit )
fileNames.append( dir.absPath() + "/" + *fit );
QStringList dirList = dir.entryList( QDir::Dirs );
dirList.remove( "." );
dirList.remove( ".." );
for ( QStringList::Iterator dit = dirList.begin(); dit != dirList.end(); ++dit ) {
QDir curDir = dir;
curDir.cd( *dit );
QStringList curList = getDirFiles( curDir.absPath() );
for ( QStringList::Iterator it = curList.begin(); it != curList.end(); ++it ) fileNames.append( QFileInfo(*it).absFilePath() );
}
return fileNames;
}

int main( int argc, char** argv )
{
QFileInfo fi( argv[0] );
QString startDir = fi.dirPath( true );
if ( argc > 1 ) startDir = QString( argv[1] );
QStringList allFiles;
allFiles = getDirFiles( startDir );
printf( "All Files : \n%s", allFiles.join("\n").latin1() );
return 0;
}


Название: Рекурсивный перебор файлов в подпапках
Отправлено: Larrikin от Ноябрь 03, 2005, 09:52
Цитата: "Sergeich"
Мля! Что за задача!!! Ни хуя не понятно... И кто тя учил так писать рекурсивные ф-ции!!?? Вобщем вот прога, рекурсивно выдающая файлы из директории начиная с текущей, мля... Задачу надо корректно ставить...  
Код:

#include <qstringlist.h>
#include <qdir.h>
#include <stdio.h>

QStringList getDirFiles( const QString& dirName  )
{
QDir dir( dirName );
if ( !dir.exists() ) qFatal( "No such directory : %s", dir.dirName().latin1() );
QStringList fileNames;
QStringList fileList = dir.entryList( QDir::Files );
for ( QStringList::Iterator fit = fileList.begin(); fit != fileList.end(); ++fit )
fileNames.append( dir.absPath() + "/" + *fit );
QStringList dirList = dir.entryList( QDir::Dirs );
dirList.remove( "." );
dirList.remove( ".." );
for ( QStringList::Iterator dit = dirList.begin(); dit != dirList.end(); ++dit ) {
QDir curDir = dir;
curDir.cd( *dit );
QStringList curList = getDirFiles( curDir.absPath() );
for ( QStringList::Iterator it = curList.begin(); it != curList.end(); ++it ) fileNames.append( QFileInfo(*it).absFilePath() );
}
return fileNames;
}

int main( int argc, char** argv )
{
QFileInfo fi( argv[0] );
QString startDir = fi.dirPath( true );
if ( argc > 1 ) startDir = QString( argv[1] );
QStringList allFiles;
allFiles = getDirFiles( startDir );
printf( "All Files : \n%s", allFiles.join("\n").latin1() );
return 0;
}

Спасибо за код :) подправить немного пришлось конечно чтоб заработало.
А на обвинения в "Мля! Что за задача!!!"... так начинаю только программировать :) не обессудте :)


Название: Re: Рекурсивный перебор файлов в подпапках
Отправлено: Павелъ от Апрель 28, 2017, 14:45
Цитата: Sergeich
Мля! Что за задача!!! Ни хуя не понятно... И кто тя учил так писать рекурсивные ф-ции!!?? Вобщем вот прога, рекурсивно выдающая файлы из директории начиная с текущей, мля... Задачу надо корректно ставить...  
Код:
#include <qstringlist.h>
#include <qdir.h>
#include <stdio.h>

QStringList getDirFiles( const QString& dirName  )
{
QDir dir( dirName );
if ( !dir.exists() ) qFatal( "No such directory : %s", dir.dirName().latin1() );
QStringList fileNames;
QStringList fileList = dir.entryList( QDir::Files );
for ( QStringList::Iterator fit = fileList.begin(); fit != fileList.end(); ++fit )
fileNames.append( dir.absPath() + "/" + *fit );
QStringList dirList = dir.entryList( QDir::Dirs );
dirList.remove( "." );
dirList.remove( ".." );
for ( QStringList::Iterator dit = dirList.begin(); dit != dirList.end(); ++dit ) {
QDir curDir = dir;
curDir.cd( *dit );
QStringList curList = getDirFiles( curDir.absPath() );
for ( QStringList::Iterator it = curList.begin(); it != curList.end(); ++it ) fileNames.append( QFileInfo(*it).absFilePath() );
}
return fileNames;
}

int main( int argc, char** argv )
{
QFileInfo fi( argv[0] );
QString startDir = fi.dirPath( true );
if ( argc > 1 ) startDir = QString( argv[1] );
QStringList allFiles;
allFiles = getDirFiles( startDir );
printf( "All Files : \n%s", allFiles.join("\n").latin1() );
return 0;
}
Спасибо за код :) подправить немного пришлось конечно чтоб заработало.
А на обвинения в "Мля! Что за задача!!!"... так начинаю только программировать :) не обессудте :)

У меня эта функция не видит файлы в скрытых папках. Пробовал фильтры делать QDir::Hidden | QDir::AllFiles | QDirSimLink - ничего не помогает.
Подскажите, как отобразить файлы в скрытых папках?

Проект делаю на Windows/


Название: Re: Рекурсивный перебор файлов в подпапках
Отправлено: Павелъ от Апрель 28, 2017, 14:59
Разобрался. Надо было сюда подать.


Название: Re: Рекурсивный перебор файлов в подпапках
Отправлено: kambala от Апрель 28, 2017, 23:27
вот это некропост — 11.5 лет :)