1. Наш канал codeby в telegram. Пишем об информационной безопасности, методах защиты информации, о программировании. Не пропускай новости с кодебай, будь в тренде ! Подробнее ...

    Скрыть объявление

Поиск файлов с помощью Boost::filesystem

Тема в разделе "С и С++", создана пользователем -, 20 авг 2007.

Статус темы:
Закрыта.
  1. Гость

    Репутация:
    0
    Вот такой рекурсивной функцией пытаюсь найти в нужной папке на сетевом диске или ее подпапках файл.
    Все работает нормально, до тех пор, пока не натыкаюсь на папку, к которой доступ запрещен. Ну и не буду я в ней искать, мне нужно ее перескочить. Подскажите, как сделать?

    Код:
    bool FindFile( const boost::filesystem::path & dir_path,	 // в этом каталоге,
    CString file_name, // искать такое имя,
    boost::filesystem::path & path_found )		// разместить путь здесь если удалось найти
    {
    
    CString sFileName;
    if ( !boost::filesystem::exists( dir_path ) ) return false; ////[b]Эта проверка в debuge выполняется[/b]
    boost::filesystem::directory_iterator end_itr;
    boost::filesystem::directory_iterator itr(dir_path); /////[b]exception здесь[/b]
    
    for (;itr != end_itr;++itr )
    {
    if (boost::filesystem::is_other(itr->status()))continue;
    wchar_t * pwsz;
    acutNewString(pwsz,1000);////Что начинается с acut - функции выделения памяти под строки
    mbstowcs(pwsz, itr->leaf().c_str(), 1000); 
    sFileName.Append(pwsz);
    acutPrintf(_T("\n%s"),pwsz);
    acutDelString(pwsz);
    if ( boost::filesystem::is_directory( *itr ) )
    {
    
    if (FindFile( *itr, file_name, path_found ) ) return true;
    }
    else if ( 0==sFileName.Compare(file_name) )
    {
    path_found = *itr;
    return true;
    }
    }
    return false;
    }

    платформа VS2005, проект ObjectARX2007
     
  2. Kmet

    Kmet Well-Known Member
    Java Team

    Репутация:
    0
    Регистрация:
    25 май 2006
    Сообщения:
    1.036
    Симпатии:
    8
    перехватываем исключение и выходим из функции с false. в чем сложность?
     
  3. Гость

    Репутация:
    0
    А как при этом я попаду на следующую директорию/файл? itr++ я сделать не могу. Да и с чем мне сравнивать исключение?
     
  4. Kmet

    Kmet Well-Known Member
    Java Team

    Репутация:
    0
    Регистрация:
    25 май 2006
    Сообщения:
    1.036
    Симпатии:
    8
    на пальцах...

    boost::filesystem::directory_iterator itr(dir_path) создает итератор на вложенные элементы директории. Если к деректории нет доступами, логично что итератор создаться не может. В следующую директорию/файл ты попадешь за счет рекурсии.

    RTFM
     
  5. Гость

    Репутация:
    0
    Не понял (((

    У меня не создался itr, я не знаю itr++. Я знаю лишь путь к уже просмотренному файлу, который обрабатывался до встречи с закрытой папкой+ путь к самой папке. Я не знаю ни имя следующего файла в закрытой папке, ни имени соседней папки. Что передавать рекурсивно?
    либо: FindFile( oldPath, file_name, path_found ) - это уже проверили
    либо: FindFile( *olditr, file_name, path_found ) - то же самое
    либо: FindFile( NULL, file_name, path_found ) - не сработает

    Вы имеете в виду, что надо в глобальную переменную сохранять последний валидный itr и передавать что-то вроде: FindFile( validIter++++, file_name, path_found ) - частично сработает, за исключением случаев, когда мы самым первым шагом натыкаемся на закрытую папку?
     
  6. Kmet

    Kmet Well-Known Member
    Java Team

    Репутация:
    0
    Регистрация:
    25 май 2006
    Сообщения:
    1.036
    Симпатии:
    8
    поэтому делаем return false;
     
  7. Гость

    Репутация:
    0
    И что это дает? Мы отказываемся от поиска в остальных папках диска, наткнувшись на закрытую?
     
  8. Kmet

    Kmet Well-Known Member
    Java Team

    Репутация:
    0
    Регистрация:
    25 май 2006
    Сообщения:
    1.036
    Симпатии:
    8
    это вернет нас на предыдущий уровень рекурсии.
     
  9. Гость

    Репутация:
    0
    вот в этом и заключается мой вопрос, как с предыдущего уровня рекурсии перепрыгнуть тупиковую ветку и войти в другую?
     
  10. Гость

    Репутация:
    0
    а-а-а... понял ))). Действительно. Большое спасибо)
     
  11. Kmet

    Kmet Well-Known Member
    Java Team

    Репутация:
    0
    Регистрация:
    25 май 2006
    Сообщения:
    1.036
    Симпатии:
    8
Загрузка...
Похожие Темы - Поиск файлов помощью
  1. vital
    Ответов:
    6
    Просмотров:
    4.288
  2. Wanderer
    Ответов:
    12
    Просмотров:
    5.304
  3. ILIMDAR
    Ответов:
    0
    Просмотров:
    33
  4. komodikus
    Ответов:
    1
    Просмотров:
    140
  5. nerfy
    Ответов:
    4
    Просмотров:
    126
Статус темы:
Закрыта.

Поделиться этой страницей