Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вопрос по директориям 
:(
    Опции темы
Daevaorn
Дата 14.9.2006, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Мдя, лажанулся не по детски. Новый вариантsmile
Код

#include <string>
#include <iostream>
#include <Windows.h>

void f( std::string Dir )
{
    WIN32_FIND_DATA FindFileData;
    HANDLE hFind = INVALID_HANDLE_VALUE;

    hFind = FindFirstFile( ( Dir + "\\*" ).c_str(), &FindFileData );

    if( hFind == INVALID_HANDLE_VALUE )
    {
        std::cout<< "Invalid handler. Error code: " << GetLastError() << std::endl;
        return;
    }

    do
    {    
        std::string temp( FindFileData.cFileName );

        if( FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
        {
            if( temp != "." && temp != ".." )
            {
                std::cout<< "Next Dir name is " << temp << std::endl;
                f( Dir + '/' + temp );
            }
        }
        else
            std::cout<< "\tNext File name is " << temp << std::endl;
    }
    while( FindNextFile(hFind, &FindFileData) != 0 );
}

int main()
{
    f( "G:/Windows" );

    return 0;
}

PM MAIL WWW   Вверх
knut
Дата 14.9.2006, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



Damarus
Обясни если не трудно  18 пункт.И вопрос.как заити мне в  поддиректорию найденнои директории.
так что ли "\\*', Веть FindFirstFile и FindNexttFile работают только с дирами? И  есче у тебя там вечный цикл.
Зарание Спасибо.



--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
Romikgy
Дата 14.9.2006, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 8
Всего: 146



knut, ты примеры смотрел?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
knut
Дата 14.9.2006, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



Romikgy, там веть вечный цикл?


--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
Romikgy
Дата 14.9.2006, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 8
Всего: 146



Цитата(knut @  14.9.2006,  13:12 Найти цитируемый пост)
там веть вечный цикл? 

хде?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
knut
Дата 14.9.2006, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



Romikgy
Код


if (hFind == INVALID_HANDLE_VALUE)
    {
        _tprintf(_T("Invalid Dir %u\n"), GetLastError());
    }
    else
    {
        _tprintf(_T("The First File name %s\n"), FindFileData.cFileName);
        if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY
         && _tcscmp(FindFileData.cFileName,_T("."))!=0
         && _tcscmp(FindFileData.cFileName,_T(".."))!=0);     
        {
            _tprintf(FindFileData.cFileName,"\n");

            DirecSpec = DirecSpec + FindFileData.cFileName;
                        _tprintf(DirecSpec.c_str(),"\n");
            f(DirecSpec);
        }
        


здесь он из иф а не вxыодет.на какое условие он из рекурсии выдет?



--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
Romikgy
Дата 14.9.2006, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 8
Всего: 146



Цитата(knut @  14.9.2006,  13:25 Найти цитируемый пост)
здесь он из иф а не вxыодет.на какое условие он из рекурсии выдет?

это твои умозаключения? ты этот код проверял? 
PS я проверял и у меня и компилился и работал


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Damarus
Дата 14.9.2006, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

Репутация: 6
Всего: 29



Цитата(knut @  14.9.2006,  14:07 Найти цитируемый пост)
Обясни если не трудно  18 пункт.

Проверяем, что нашли директорию и что её имя не "." (текущая директория) и не ".." (родительская директория).

Цитата(knut @  14.9.2006,  14:07 Найти цитируемый пост)
И вопрос.как заити мне в  поддиректорию найденнои директории.

Добавить к директории поддиректорию, т.е. если:
"C:" - директория, в которой ищешь,
"Windows" - найденная директория, то надо получить:
новая директория поиска = "C:" + "\\" + "Windows";
Далее вызываешь свою функцию, но уже с новой директорией.

Цитата(knut @  14.9.2006,  14:07 Найти цитируемый пост)
так что ли "\\*', Веть FindFirstFile и FindNexttFile работают только с дирами?

"\\*" значит - искать все файлы, если, например, укажешь "\\*.txt", будут найдены только .txt файлы.

Цитата(knut @  14.9.2006,  14:07 Найти цитируемый пост)
 И  есче у тебя там вечный цикл.

Нет такого. Выход из рекурсии произойдёт, когда будут найдены все файлы.

Это сообщение отредактировал(а) Damarus - 14.9.2006, 16:27
PM MAIL ICQ Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0964 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.