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

Поиск:

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


Опытный
**


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

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



Вот написал прогу каторая принтует все директори карневой дитектори.
Вопрос как мне распечатать все поддиректори моиx директори?
Код

void f(basic_string <TCHAR> Dir)
{
    WIN32_FIND_DATA FindFileData;
    HANDLE hFind = INVALID_HANDLE_VALUE;
    DWORD dwError;
    basic_string <TCHAR> DirecSpec;

    _tprintf (_T("Target directory is %s.\n"), _T("D:\\"));    
    Dir+= _T("\\*");

    DirecSpec = Dir;                            //copy
    DirecSpec += _T("\\*");                                               //cat
    hFind = FindFirstFile(Dir.c_str(), &FindFileData);
    
    //void f(basic_string<TCHAR>Dir);
    
    if (hFind == INVALID_HANDLE_VALUE)
    {
        _tprintf(_T("Invalid Dir %u"), GetLastError());
    }
    else
    {
        _tprintf(_T("The First File name %s\n"), FindFileData.cFileName);
        while (FindNextFile(hFind, &FindFileData) != 0)
        {
            _tprintf(_T("Next File name is   %s\n"), FindFileData.cFileName);
        }
        dwError = GetLastError();
        FindClose(hFind);
        if (dwError != ERROR_NO_MORE_FILES)
        {
            _tprintf(_T("Find next file error"), dwError);
        }
    }
}



Код

basic_string <TCHAR> dir = _T("d:");
    f(dir);
    return 0;


Добавлено @ 16:21 
Код

int main()
{
    basic_string <TCHAR> dir = _T("d:");
    f(dir);
    //f1(dir);
    return 0;
}



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

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


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


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

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



Цитата(knut @  13.9.2006,  15:20 Найти цитируемый пост)
Вопрос как мне распечатать все поддиректори моиx директори?

рекурсия


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

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


Опытный
**


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

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



У неня не как не получается вывести на экран подриректори .
Код

void f(basic_string <TCHAR> Dir)
{
    WIN32_FIND_DATA FindFileData;
    HANDLE hFind = INVALID_HANDLE_VALUE;
    DWORD dwError;
    basic_string <TCHAR> DirecSpec;

    _tprintf (_T("Target directory is %s.\n"), _T("D:\\"));    
    Dir+= _T("\\*");

    DirecSpec = Dir;                            //copy
    DirecSpec += _T("\\*");                //cat
    hFind = FindFirstFile(Dir.c_str(), &FindFileData);
    
    if (hFind == INVALID_HANDLE_VALUE)
    {
        _tprintf(_T("Invalid Dir %u"), GetLastError());
    }
    else
    {
        _tprintf(_T("The First File name %s\n"), FindFileData.cFileName);

        if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)     //есле же дир.
        {
            f1(Dir);
        }
        

        while (FindNextFile(hFind, &FindFileData) != 0)
        {
            _tprintf(_T("Next File name is   %s\n"), FindFileData.cFileName);
        }
        dwError = GetLastError();
        FindClose(hFind);
        if (dwError != ERROR_NO_MORE_FILES)
        {
            _tprintf(_T("Find next file error"), dwError);
        }
    }
}


Код

void f1(basic_string <TCHAR> Dir)
{    
    WIN32_FIND_DATA FindFileData;
    HANDLE hFind = INVALID_HANDLE_VALUE;
    
            Dir+=_T("\\*");
            f( Dir);
            _tprintf(_T("The SubDirectory is %s\n"),FindFileData.cFileName);
            while(FindNextFile(hFind, &FindFileData) != 0)
            {
                _tprintf(_T("Next SubDirectory name is %s\n"),FindFileData.cFileName);
            } 
     
     
}


как заити мне в поддиректории директории?


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

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


Эксперт
****


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

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



Цитата(knut @  14.9.2006,  10:50 Найти цитируемый пост)
f1(Dir);

Почему не просто f(dir); ?
PM MAIL WWW   Вверх
knut
Дата 14.9.2006, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Daevaorn
Согласен 
Код

void f(basic_string <TCHAR> Dir)
{
    WIN32_FIND_DATA FindFileData;
    HANDLE hFind = INVALID_HANDLE_VALUE;
    DWORD dwError;
    basic_string <TCHAR> DirecSpec;

//    _tprintf (_T("Target directory is %s.\n"), _T("D:\\"));    
    Dir+= _T("\\*");

    DirecSpec = Dir;                            //copy
    DirecSpec += _T("\\*");                //cat
    hFind = FindFirstFile(Dir.c_str(), &FindFileData);
    
    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)
        {
            Dir+=_T("\\*");
            f(Dir);
        }
        

        while (FindNextFile(hFind, &FindFileData) != 0)
        {
            _tprintf(_T("Next File name is   %s\n"), FindFileData.cFileName);
        }
        dwError = GetLastError();
        FindClose(hFind);
        if (dwError != ERROR_NO_MORE_FILES)
        {
            _tprintf(_T("Find next file error"), dwError);
        }
    }
}


но она все равно поддиректорию не заьодет .Подскажите как реализовать вxод в поддиректорию?



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

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


Эксперт
****


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

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



Цитата(knut @  14.9.2006,  11:19 Найти цитируемый пост)
_tprintf(_T("The First File name %s\n"), FindFileData.cFileName);

        if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
        {
            Dir+=_T("\\*");
            f(Dir);
        }

В f надо передать имя найденой директории, а ты что делаешь?
PM MAIL WWW   Вверх
knut
Дата 14.9.2006, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
        {
                        
            f(FindFileData.cFileName);
        }


Daevaorn,  та ты прав но все равно заxодет суда
Код

 
if (hFind == INVALID_HANDLE_VALUE)
    {
        _tprintf(_T("Invalid Dir %u\n"), GetLastError());
    }



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

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


Эксперт
****


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

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



knut, дебагером пройдись. Посмотри какие значения у FindFileData.cFileName и у dir уже внутри функции.
PM MAIL WWW   Вверх
knut
Дата 14.9.2006, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Daevaorn
делал как он  после  f(FindFileData.cFileName) заxодет в void f(basic_string <TCHAR> Dir)  дир у него правелный а вот FindFileData.cFileName он теряет потаму и заxодет 
if (hFind == INVALID_HANDLE_VALUE) но почему?


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

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


Эксперт
****


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

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



knut
Доки читать не хочешь? Код ошибки посмотреть не интересно? Напрячь мозги трудно?
Код

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

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

    Dir += "\\*";

    hFind = FindFirstFile( Dir.c_str(), &FindFileData );

    while( FindNextFile(hFind, &FindFileData) != 0 )
    {    
        if( hFind == INVALID_HANDLE_VALUE )
        {
            std::cout<< "Invalid handler. Error code: " << GetLastError() << std::endl;
        }
        else
        {
            std::string temp( FindFileData.cFileName );

            if( FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY && temp != "." && temp != ".." )
            {
                std::cout<< "Next Dir name is " << FindFileData.cFileName << std::endl;
                f( temp );
            }
            else
                std::cout<< "\tNext File name is " << FindFileData.cFileName << std::endl;
        }
    }
}

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

    return 0;
}


Правка:
P.S. Дружеский совет: меняй род деятельности - не твоё этоsmile

Это сообщение отредактировал(а) Daevaorn - 14.9.2006, 11:43
PM MAIL WWW   Вверх
Damarus
Дата 14.9.2006, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Daevaorn @  14.9.2006,  12:42 Найти цитируемый пост)
P.S. Дружеский совет: меняй род деятельности - не твоё это

Daevaorn, я думаю это не тебе решать, твой код тоже не рабочий smile .
PM MAIL ICQ Jabber   Вверх
knut
Дата 14.9.2006, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Daevaorn, ну и что по твоему твой код поддиректории принтует? а в вопросе четка задача есна мне надо и директории и иx поддиректории.А директории и мои код принтовалsmile


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

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


Опытный
**


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

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



Код

void f(std::basic_string<TCHAR> directory)
{
    std::basic_string<TCHAR> search_path(directory);
    search_path += TEXT("\\*");

    WIN32_FIND_DATA FindData;
    HANDLE hSearch = FindFirstFile(search_path.c_str(), &FindData);
    if (hSearch != INVALID_HANDLE_VALUE)
    {
        do
        {
            std::basic_string<TCHAR> full_path(directory);
            full_path += TEXT("\\");
            full_path += FindData.cFileName;

            _tprintf(TEXT("%s\n"), full_path.c_str());

            if (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY && 
                _tcscmp(FindData.cFileName, TEXT(".")) &&
                _tcscmp(FindData.cFileName, TEXT("..")))
            {
                f(full_path);
            }
        }
        while (FindNextFile(hSearch, &FindData));

        FindClose(hSearch);
    }
}

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


Эксперт
****


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

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



Цитата(Damarus @  14.9.2006,  13:00 Найти цитируемый пост)
я думаю это не тебе решать,

Я не решаю, советую.


Это сообщение отредактировал(а) Daevaorn - 14.9.2006, 12:46
PM MAIL WWW   Вверх
Romikgy
Дата 14.9.2006, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Код

void f(basic_string <TCHAR> Dir)
{
    WIN32_FIND_DATA FindFileData;
    HANDLE hFind = INVALID_HANDLE_VALUE;
    DWORD dwError;
    basic_string <TCHAR> DirecSpec;
    _tprintf (_T("Target directory is %s.\n"), Dir.c_str());
    DirecSpec = Dir;
    Dir+= _T("\\*");
                                //copy
    DirecSpec += _T("\\");                //cat
    hFind = FindFirstFile(Dir.c_str(), &FindFileData);

    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
         && strcmp(FindFileData.cFileName,".")!=0
         && strcmp(FindFileData.cFileName,"..")!=0)     //åñëå æå äèð.
        {
            cout<<FindFileData.cFileName<<"\n";

            DirecSpec=DirecSpec+FindFileData.cFileName;
            cout<<DirecSpec<<"\n";
            f(DirecSpec);
        }
        
        while (FindNextFile(hFind, &FindFileData) != 0)
        {
            if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY
         && strcmp(FindFileData.cFileName,".")!=0
         && strcmp(FindFileData.cFileName,"..")!=0)     //åñëå æå äèð.
        {
            cout<<FindFileData.cFileName<<"\n";

            DirecSpec=DirecSpec+FindFileData.cFileName;
            cout<<DirecSpec<<"\n";
            f(DirecSpec);
        }
        else
            _tprintf(_T("Next File name is   %s\n"), FindFileData.cFileName);
        }
        dwError = GetLastError();
        FindClose(hFind);
        if (dwError != ERROR_NO_MORE_FILES)
        {
            _tprintf(_T("Find next file error\n"), dwError);
        }
    }
}

У мя так работает


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

PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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