Russian Qt Forum

Программирование => С/C++ => Тема начата: ecspertiza от Мая 04, 2010, 09:02



Название: Рекурсивный проход по директориям
Отправлено: ecspertiza от Мая 04, 2010, 09:02
На первый взгляд задача очень простая, но при некоторых критериях она заметно усложняется, задача такая мне нужно написать COM объект на основе микросовтовского ATL, в которой нужно рекурсивно пройтись по директориям, я пробовал использовать класс  микросовтовский CFile ,но он работает только если приложение MFC, пробовал подключить boost, но если написать даже вот так

Код:
#include <boost/filesystem/path.hpp>
#include <boost/filesystem/operations.hpp>
using namespace boost::filesystem;
int main()
{
    directory_iterator dir(current_path());
    return 0;
}
то софтина немедленно вылетает, при том если тот же код собрать MinGW то все хорошо отрабатывает. Паганый Microsoft!!!! >:( >:( 
Кто работал с Visual Studio какие есть еше варианты?


Название: Re: Рекурсивный проход по директориям
Отправлено: niXman от Мая 04, 2010, 11:23
на boost не гнать.
этот код компилится и работает. наверное проблема из-за чего-то еще.


Название: Re: Рекурсивный проход по директориям
Отправлено: ecspertiza от Мая 04, 2010, 12:09
Цитата: niXman
на boost не гнать.

На него родимого невкоем случае :) я больше на компилятор микросовтовский ругаюсь, никогда у меня с ним понимания не было :)


Название: Re: Рекурсивный проход по директориям
Отправлено: garryHotDog от Мая 04, 2010, 17:26
что то я не догнал?! в чем проблема? Рекурсивный проход в QT ??


Название: Re: Рекурсивный проход по директориям
Отправлено: niXman от Мая 04, 2010, 17:33
Цитировать
Рекурсивный проход в QT ??
нет, при помощи boost::filesystem::recursive_directory_iterator (http://www.boost.org/doc/libs/1_42_0/libs/filesystem/doc/reference.html#Class-template-basic_recursive_directory_iterator)


Название: Re: Рекурсивный проход по директориям
Отправлено: ecspertiza от Мая 04, 2010, 17:50
А вот вы оба и не угадали, нужно написать dll-ку в которой будет рекурсивный проход по директориям, тянуть за собой Qt слишком накладно, boost хороший вариант ,но с ним как то не прокатило, интересовали стандартные средства C++, или может либы ,но что бы потом зависимостей немного было ,а лучше вообще без них, сделал вот так.

Код:
void recursive_dir(std::string dir,std::string last)
{
    std::string strWildcard = dir + "/*.*";
    std::string lastDir = last;
    _finddata_t s_Dir;
    intptr_t hDir;
    if( (hDir = _findfirst( strWildcard.c_str(), &s_Dir )) == -1L )
        return;
    do
    {
        if( s_Dir.name[ 0 ] != '.' && ( s_Dir.attrib & _A_SUBDIR ))
        {
            recursive_dir(dir + '/' + s_Dir.name,lastDir+"/"+s_Dir.name);
        }else if (s_Dir.name[ 0 ] != '.' )
            std::cout << "File: " << lastDir << "/" << s_Dir.name <<  std::endl;
    } while( _findnext( hDir, &s_Dir ) == 0 );
    _findclose( hDir );
    return;
}


Название: Re: Рекурсивный проход по директориям
Отправлено: niXman от Мая 04, 2010, 18:49
ради любопытства, разобрался бы с причиной ошибки.


Название: Re: Рекурсивный проход по директориям
Отправлено: ecspertiza от Мая 04, 2010, 19:26
это само собой, только длл-ку допишу, сроки стынут :)