C++ Subdirectories finden

hallo!
ich habe eine funktion erstellt die ordner finden soll (das tut sie auch).
jetz habe ich vor wenn diese funktion einen ordner findet, das sie sich selbst aufruft und den pfad des soeben gefunden ordners als neuen suchpfad für weiter ordner benutzt. quasi sollen alle unterordner gefunden werden.

hier ist die funktion:

int FindDirs( char path[])
{
char spath[500];
strcpy(spath,path);
strcat(spath,"\\");
strcat(path,"\\*.*");
int ret=0;
HANDLE hFound;
WIN32_FIND_DATA ffdFoundData;

hFound = FindFirstFile(path,(LPWIN32_FIND_DATA)&ffdFoundData);

if( (HANDLE)(-1) == hFound)
{
if( GetLastError() != ERROR_FILE_NOT_FOUND)
{
printf("ERROR 1@ %s\n",path);
return ret;
}
}

if( ffdFoundData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY )
{
strcat(spath,ffdFoundData.cFileName);
FindDirs(spath);
}


while( FindNextFile( hFound,(LPWIN32_FIND_DATA)&ffdFoundData) != NULL )
{
if( ffdFoundData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY )
{
strcat(spath,ffdFoundData.cFileName);
FindDirs(spath);
}
}
return ret;
}


allerdings funktioniert das ganze nicht so wirklich, ihr könnt ja einfach mal die funktion benutzen.. der erste ordner wird korrekt gefunden, aber danach geht alles schief..

wo ist das problem? ich bin das ganze schon mehrmals im kopf durchgegangen und habe mit einigen printf an diversesn stellen nachgeguggt, welche werte die variablen haben, aber konnte keinen fehler finden.

danke im vorraus

(ps: das ganze ist für ein programm welches ähnlich sein soll wie das dir programm von windows)
 
Funktionen können sich doch nicht selber aufrufen, oder irre ich mich da total ?
Soweit ich weiß geht das nur bei Prozeduren....
Das würde auch erklären warum es dann nur "das erste mal" klappt.

mfg
crack
 
Mir sind spontan zwei Sachen aufgefallen:
1. Du fängst die Ordner "." und ".." nicht ab. Die werden auch von FindFirstFile zurückgegeben. Mit Punkten im Pfad könntest du Probleme bekommen.
2. Du hängst an spath einen backslash was eigentlich eine gute Idee ist, aber im ersten Rekursionsschritt enthält dein Pfad schon einen Backslash und bekommt so einen zweiten angeheftet.

Vielleicht hilft dir das ja weiter.
 
hi!
also ich hab das ganze jetz so gelöst:
Code:
int FindDirs( char path[], int subdir)
{

	char searchpath[500];		
	char newpath[500];
	sprintf(searchpath,"%s\\*.*",path);	
	
	FindFiles(searchpath,subdir);

	int ret=0;
	HANDLE hFound;
	WIN32_FIND_DATA ffdFoundData;

	hFound = FindFirstFile(searchpath,(LPWIN32_FIND_DATA)&ffdFoundData);

	if( (HANDLE)(-1) == hFound)
	{
		if( GetLastError() != ERROR_FILE_NOT_FOUND)
		{	
			
			printf("ERROR 1@ %s\n",searchpath);
			return ret;
		}
	}
	else	subdir++;		// so we can use Optic(int howmuch) to make the listing a lil bit more cleared

	if( ffdFoundData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY )
	{	
		if ((strcmp(ffdFoundData.cFileName, ".")!=0) && (strcmp(ffdFoundData.cFileName, "..")!=0)) 
		{	
			ret++;
			alldirs++;
			Optic(subdir);printf("%i: %s\n",ret,ffdFoundData.cFileName);
					
			strcpy(newpath,path);
			strcat(newpath,"\\");
			strcat(newpath,ffdFoundData.cFileName);
			FindDirs(newpath,subdir);					
		}
	}


	while( FindNextFile( hFound,(LPWIN32_FIND_DATA)&ffdFoundData) != NULL )
	{	
		if ((strcmp(ffdFoundData.cFileName, ".")!=0) && (strcmp(ffdFoundData.cFileName, "..")!=0)) 
		{
			if( ffdFoundData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY )
			{	
				ret++;
				alldirs++;
				Optic(subdir);printf("%i: %s\n",ret,ffdFoundData.cFileName);
							
				strcpy(newpath,path);
				strcat(newpath,"\\");
				strcat(newpath,ffdFoundData.cFileName);
				FindDirs(newpath,subdir);
			}
		}
	}
	return ret;
}
 
Zurück
Oben