Löschen leere Verzeichnisse rekursiv

delEmptyDir.c
//Programm zum rekursiven loeschen von leeren Verzeichnisse 
// siehe auch http://www.charlescurley.com/fn.html
 
#include <windows.h>
#include <stdio.h>
#include <string.h>
 
char *generic = "*";
BOOL recurse = 1;		// shall we recurse? Default is yes.
char szPath[16000];
 
//-------------------------------------------------------------------------------------
/*	concatenate path suffix to path prefix	*/
__inline char *dircat(register char *pfx, register char *sfx)
 
{
  extern char *strcat();
  register char *p; register int nb, npfx;
  nb = (npfx = strlen(pfx)) + 1 + strlen(sfx) + 1;
 
  if(( p = malloc(nb)) == (char *)0) exit(1);
  strcpy(p, pfx);
  if(npfx != 0 && pfx[npfx-1] != '\\') lstrcat(p, "\\");
  return lstrcat(p, sfx);
}
//-------------------------------------------------------------------------------------
/*	search the directory specified by dirname	*/
int find(char *name,char *spec)
 
 {
  register char *globname, *newname;
  WIN32_FIND_DATA FileData;
  HANDLE hFile;
 
  if (recurse) {
    globname = dircat(name, generic);
    if((hFile = FindFirstFile(globname, &FileData)) != INVALID_HANDLE_VALUE) {
      do {
	if (!(!strcmp (FileData.cFileName, ".") || !strcmp (FileData.cFileName, ".."))) {
	  if(FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
	    newname = dircat(name, FileData.cFileName);
	    find(newname, spec);
		//hier versuchen leere Verzeichnisse zu löschen
		if(RemoveDirectory(newname)){
		   printf("leeres Verzeichnis: %s geloescht\n", newname);
	    }
	    free(newname);
	  }
	}
   } while (FindNextFile(hFile, &FileData) != 0);
  }
 
    FindClose( hFile );
 }
 
return 0;
 
}
//-------------------------------------------------------------------------------------
int main(int argc,char *argv[])
 
 {
  char *spec, *path;
 
  printf("Programm zum rekursiven loeschen von leeren Verzeichnisse : %s\n",argv[0]);
 
  if((argc == 1) || (argc > 2) )
    {
    printf("Nutzung von : %s \n",argv[0]);
    printf("Beispiel : %s h:\\meinVerzeichnis\\\n",argv[0]);
    printf("  oder   : %s  \\\\meinUNCServer\\meinVerzeichnis\\\n",argv[0]);
    return 1;
    }
 
	path = argv[1];
	spec = generic;
 
	find(path, spec);
 
  return 0;
}