Russian Qt Forum
Март 29, 2024, 09:26 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Рекурсивный перебор файлов в подпапках  (Прочитано 14522 раз)
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
Гость
« Ответ #1 : Ноябрь 02, 2005, 18:12 »

Похожая тема была: http://prog.org.ru/forum/topic_1426.html
Может пригодится.
Записан
lepsai
Гость
« Ответ #2 : Ноябрь 03, 2005, 02:03 »

можешь юзать: http://www.ku-soft.de/fdlist.html
Записан
Sergeich
Гость
« Ответ #3 : Ноябрь 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
Гость
« Ответ #4 : Ноябрь 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;
}

Спасибо за код Улыбающийся подправить немного пришлось конечно чтоб заработало.
А на обвинения в "Мля! Что за задача!!!"... так начинаю только программировать Улыбающийся не обессудте Улыбающийся
Записан
Павелъ
Гость
« Ответ #5 : Апрель 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/
Записан
Павелъ
Гость
« Ответ #6 : Апрель 28, 2017, 14:59 »

Разобрался. Надо было сюда подать.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4724



Просмотр профиля WWW
« Ответ #7 : Апрель 28, 2017, 23:27 »

вот это некропост — 11.5 лет Улыбающийся
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.13 секунд. Запросов: 22.