Название: Рекурсивный перебор файлов в подпапках
Отправлено: 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
Мля! Что за задача!!! Ни хуя не понятно... И кто тя учил так писать рекурсивные ф-ции!!?? Вобщем вот прога, рекурсивно выдающая файлы из директории начиная с текущей, мля... Задачу надо корректно ставить... #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
Мля! Что за задача!!! Ни хуя не понятно... И кто тя учил так писать рекурсивные ф-ции!!?? Вобщем вот прога, рекурсивно выдающая файлы из директории начиная с текущей, мля... Задачу надо корректно ставить... #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 лет :)
|