﻿<?xml version='1.0' encoding='UTF-8'?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Релиб / Программирование / C++  / Рекурсивный обход директорий / Latest Posts</title><generator>InstantForum.NET v4.1.4</generator><description>Релиб</description><link>http://www.relib.com/forums/</link><webMaster>robot@relib.com</webMaster><lastBuildDate>Thu, 08 Jan 2009 07:30:32 GMT</lastBuildDate><ttl>20</ttl><item><title>RE: Рекурсивный обход директорий</title><link>http://www.relib.com/forums/Topic908022-7-1.aspx</link><description>Спасибо большое, очень выручили!</description><pubDate>Mon, 27 Nov 2006 16:41:55 GMT</pubDate><dc:creator>PavelA</dc:creator></item><item><title>RE: Рекурсивный обход директорий</title><link>http://www.relib.com/forums/Topic908022-7-1.aspx</link><description>Я бы сделал примерно вот так:&lt;P&gt;[code]// Запускает обработку заданной (через currentDir) директории&lt;BR&gt;int CDirInfo::ProcessDir( std::string currentDir, bool bRecursive /* = true  */ )&lt;BR&gt;{&lt;BR&gt;    cout &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; "Dir: " &amp;lt;&amp;lt; currentDir &amp;lt;&amp;lt; endl;&lt;BR&gt;    string strWildcard;&lt;/P&gt;&lt;P&gt;#ifdef WIN32&lt;BR&gt;    //&lt;BR&gt;    // WINDOWS FindFile routines&lt;BR&gt;    //&lt;BR&gt;    strWildcard = currentDir + "\\*.*";&lt;/P&gt;&lt;P&gt;    _finddata_t s_Dir;&lt;BR&gt;    intptr_t hDir;&lt;BR&gt;   &lt;BR&gt;    if( (hDir = _findfirst( strWildcard.c_str(), &amp;amp;s_Dir )) == -1L )&lt;BR&gt;        return 1;&lt;/P&gt;&lt;P&gt;    do&lt;BR&gt;    {&lt;BR&gt;        if( s_Dir.name[ 0 ] != '.'  &amp;amp;&amp;amp; ( s_Dir.attrib &amp;amp; _A_SUBDIR ) &amp;amp;&amp;amp; bRecursive == true )&lt;BR&gt;        {&lt;BR&gt;            ProcessDir( currentDir + '\\' + s_Dir.name, bRecursive );&lt;BR&gt;        }&lt;BR&gt;        else if ( s_Dir.name[ 0 ] != '.' )&lt;BR&gt;           cout &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; "File: " &amp;lt;&amp;lt; s_Dir.name &amp;lt;&amp;lt;  endl;&lt;BR&gt;    } while( _findnext( hDir, &amp;amp;s_Dir ) == 0 );&lt;/P&gt;&lt;P&gt;    _findclose( hDir );&lt;/P&gt;&lt;P&gt;    return 0;&lt;/P&gt;&lt;P&gt;#else // #ifdef WIN32&lt;BR&gt;}[/code]</description><pubDate>Mon, 27 Nov 2006 13:19:15 GMT</pubDate><dc:creator>boombastik</dc:creator></item><item><title>RE: Рекурсивный обход директорий</title><link>http://www.relib.com/forums/Topic908022-7-1.aspx</link><description>ошибка в логике программы, текущую директорию для рекурсивной обработки лучше передавать в качестве параметра функции (так проще)&lt;br&gt;&lt;br&gt;если вы все же хотите использовать SetDir( m_strInitialDir + '\\' + s_Dir.name );&lt;br&gt;&lt;br&gt;то после обработки внутренней рекурсии необходимо сбросить текущую директорию в начальное значение&lt;br&gt;&lt;br&gt;SetDir( m_strInitialDir );&lt;br&gt;&lt;br&gt;но так как m_strInitialDir уже имеет новое значение, то предварительно это значение придется сохранить перед выполнением блока рекурсии :)&lt;br&gt;&lt;br&gt;std:string strInitialDir = m_strInitialDir;&lt;br&gt;SetDir( m_strInitialDir + '\\' + s_Dir.name );&lt;br&gt;&lt;br&gt;... вызов рекурсии ...&lt;br&gt;&lt;br&gt;SetDir( strInitialDir );&lt;br&gt;&lt;br&gt;С уважением,&lt;br&gt;Владимир</description><pubDate>Mon, 27 Nov 2006 13:15:34 GMT</pubDate><dc:creator>boombastik</dc:creator></item><item><title>Рекурсивный обход директорий</title><link>http://www.relib.com/forums/Topic908022-7-1.aspx</link><description>Уважаемые Гуру, требуется ваша помошь.&lt;P&gt;Мне необходимо реализовать рекурсивный обход директорий,начиная с заданной.&lt;/P&gt;&lt;P&gt;У меня есть класс с следующими методами:&lt;/P&gt;&lt;P&gt;[code]&lt;/P&gt;&lt;P&gt;// Устанавливает рабочую директорию&lt;BR&gt;void CDirInfo::SetDir( std::string strInitialDir )&lt;BR&gt;{&lt;BR&gt;    m_strInitialDir = strInitialDir;&lt;BR&gt;}&lt;/P&gt;&lt;P&gt;// Запускает обработку заданной (через SetDir) директории&lt;BR&gt;int CDirInfo::ProcessDir( bool bRecursive /* = true  */ )&lt;BR&gt;{&lt;BR&gt;    cout &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; "Dir: " &amp;lt;&amp;lt; m_strInitialDir &amp;lt;&amp;lt; endl;&lt;/P&gt;&lt;P&gt;    string strWildcard;&lt;/P&gt;&lt;P&gt;#ifdef WIN32&lt;BR&gt;    //&lt;BR&gt;    // WINDOWS FindFile routines&lt;BR&gt;    //&lt;BR&gt;    strWildcard = m_strInitialDir + "\\*.*";&lt;/P&gt;&lt;P&gt;    _finddata_t s_Dir;&lt;BR&gt;    intptr_t hDir;&lt;BR&gt;    &lt;BR&gt;    if( (hDir = _findfirst( strWildcard.c_str(), &amp;amp;s_Dir )) == -1L )&lt;BR&gt;        return 1;&lt;/P&gt;&lt;P&gt;    do&lt;BR&gt;    {&lt;BR&gt;        if( s_Dir.name[ 0 ] != '.'  &amp;amp;&amp;amp; ( s_Dir.attrib &amp;amp; _A_SUBDIR ) &amp;amp;&amp;amp; bRecursive == true )&lt;BR&gt;        {   &lt;BR&gt;            SetDir( m_strInitialDir + '\\' + s_Dir.name );&lt;BR&gt;            ProcessDir( bRecursive );&lt;BR&gt;        }&lt;BR&gt;        else if ( s_Dir.name[ 0 ] != '.' )&lt;BR&gt;           cout &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; "File: " &amp;lt;&amp;lt; s_Dir.name &amp;lt;&amp;lt;  endl;&lt;BR&gt;    } while( _findnext( hDir, &amp;amp;s_Dir ) == 0 );&lt;/P&gt;&lt;P&gt;    _findclose( hDir );&lt;/P&gt;&lt;P&gt;    return 0;&lt;/P&gt;&lt;BR&gt;#else // #ifdef WIN32 &lt;BR&gt;} &lt;P&gt;[/code]&lt;/P&gt;&lt;P&gt;Есть директория TEMP:&lt;/P&gt;&lt;P&gt;D:\TEMP/new/new3 и &lt;BR&gt;D:\TEMP/new2&lt;BR&gt;&lt;/P&gt;&lt;P&gt;Так вот при запуске ProcessDir() получается вот что:&lt;/P&gt;&lt;P&gt;D:\TEMP/new&lt;BR&gt;D:\TEMP/new/new3&lt;BR&gt;D:\TEMP/new2/new3/new2&lt;/P&gt;&lt;P&gt;Как мне сделать так,что бы функция заработатала?&lt;/P&gt;&lt;P&gt;Заранее всем спасибо!</description><pubDate>Mon, 27 Nov 2006 01:44:31 GMT</pubDate><dc:creator>PavelA</dc:creator></item></channel></rss>