Wyszukiwanie wszystkich folderow wraz z podfolderami
Ostatnio zmodyfikowano 2014-05-23 17:01
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: #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 ); 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. |
|
libed |
» 2014-05-23 17:01:32 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; } |
|
« 1 » |