Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wyszukiwanie wszystkich folderow wraz z podfolderami

Ostatnio zmodyfikowano 2014-05-23 17:01
Autor Wiadomość
janusz2000
Temat założony przez niniejszego użytkownika
Wyszukiwanie wszystkich folderow wraz z podfolderami
» 2014-05-22 14:50:53
Czesc
mam problem z moim programem korzystajacym z biblioteki Windows (windows.h). Program ma przeszukiwac zadana lokalizacje wraz z wszystkimi podfolderami i wypisywac nazwy tychze folderow. Musi byc on napisany pod Windowsa z uzyciem funkcji FindFirstFile i FindNextFile.

Oto moj wadliwy kod:
C/C++
#include <iostream>
#include <windows.h>

char dysk[ MAX_PATH ] = { 0 };


using namespace std;



int znajdz( char * pDirectory )
{
    char szFindPath[ MAX_PATH ] = { 0 };
    char sciezka[ MAX_PATH ] = { 0 };
    strcpy( szFindPath, pDirectory );
    strcat( szFindPath, "*.*" );
    WIN32_FIND_DATA file;
    HANDLE search_handle = FindFirstFile( szFindPath, & file );
   
    if( search_handle )
    {
        do
        {
            if( file.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY )
            {
                strcpy( sciezka, "" );
                strncat( sciezka, szFindPath, strlen( szFindPath ) - 3 ); //-3 bo w adresie jest D:\\cos_tam\\*.* <- kasowanie *
                strcat( sciezka, file.cFileName );
                strcat( sciezka, "\\" );
                znajdz( sciezka );
                std::cout << file.cFileName << std::endl;
            }
           
        } while( FindNextFile( search_handle, & file ) );
       
        CloseHandle( search_handle );
       
    }
}

int main()
{
    strcpy( dysk, "D:\\" );
    znajdz( "D:\\" );
   
    return 0;
}

Chcialem zeby funkcja dzialala rekurencyjnie, przechodzac przez wszystkie podkatalogi katalogu itd i wypisywala jeden raz ich nazwy ale niestety wypisuje te same nazwy caly czas, nie rozumiem dlaczego.
P-110649
libed
» 2014-05-23 17:01:32
C/C++
void Search( char * absolute_path ) {
    WIN32_FIND_DATAA wfd;
    static char workpath[ MAX_PATH ] = { 0 };
    std::memset( workpath, 0x00, MAX_PATH );
    std::strcpy( workpath, absolute_path );
    std::strcat( workpath, "\\*.*" );
    HANDLE hfind = FindFirstFile( workpath, & wfd );
    if( hfind == INVALID_HANDLE_VALUE ) return;
   
    do {
        if(( std::strcmp( wfd.cFileName, "." ) != 0 ) &&( std::strcmp( wfd.cFileName, ".." ) != 0 ) ) {
            if( wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) {
                char newpath[ MAX_PATH ] = { 0 };
                std::strcpy( newpath, absolute_path );
                std::strcat( newpath, "\\" );
                std::strcat( newpath, wfd.cFileName );
                Search( newpath );
                printf( "Dir; %s\n", newpath );
            }
        }
    } while( FindNextFile( hfind, & wfd ) );
   
}

int main( int argc, char ** argv ) {
    char startpath[ MAX_PATH ] = { 0 };
    GetCurrentDirectory( MAX_PATH, startpath );
    Search( startpath );
    return 0;
}
P-110746
« 1 »
  Strona 1 z 1