Verzeichnisbaum erzeugen

jokey2

Erfahrenes Mitglied
Gibt es denn eine Funktion, die mir einen ganzen Verzeichnisbaum erzeugt?
Bsp.: Es gibt das Verzeichnis C:\Test. Ich möchte ein Verzeichnis C:\Test\eins\zwei\drei anlegen.
Gibt es also eine Funktion, die dann automatisch die Verzeichnisse eins, zwei und drei erzeugt oder muß ich das selber machen. Mit CreateDirectory(...) müßte ich ja erst 'C:\Test\eins' erzeugen, dann 'C:\Test\eins\zwei' und dann 'C:\Test\eins\zwei\drei'. Ich hätt's eben gerne einfacher.
 
Also ich wüsst jetzt keine Vordefinierte Funktion die das mach weshalb ich mir auch selber eine geschrieben hab - womit ich bei Punkt 2 wär : ich poste die jetzt einfach mal um dir das Leben evtl. etwas leichter zu machen :

Code:
//--- Erstellt Ordner mitsamt der Unterorder -------------------------------------------------------------------------------
   int CreateMyFolder(CString full, CString cur, EINSTELLUNGEN *conf)
   {
   	int start = 0,
   		ende = 0;
   	if (cur.GetLength() == 0)
   	{
 	//--- erster Aufruf - Los gehts ! ----------------------------------------------------------------------------------
   		start = full.Find(":\\");
   		
   		//--- bei relatiefen Pfadangaben ergänzen ---
   		if (start == -1)
   		{
   			if (full[0] == '\\')
 				full.Insert(0,conf->path_programm);
   			else
 				full.Insert(0,conf->path_programm + "\\");
   			
   			//--- Startpunkt nachsetzten ---
   			start = full.Find(":\\");
   		}
   		
   		start+=2;
   		ende = full.Find('\\',start);
   	}
   	else
   	{
 	//--- Weitere Aufrufe - wir schaffen das ------------------------------------------------------------------------
   		start = cur.GetLength()+1;
   		ende = full.Find('\\',start);
   	}
   	
   	//MessageBox(0,full + "\t\n" + cur + "\t",0,0);
   
       //--- Erstellen oder Nicht Erstellen - DAS  ... ist hier die Frage  --------------------------------------------------
       //----------------------------------------------------------------------------------------------------------------------
   	if (ende == -1)
   		//--- keine weiteren Unterverzeichnisse ---
   		if (CreateDirectory(full,NULL) == 0 && GetLastError() != 183)
   			return 0;
   		else
 			return 1; //--- wenn's schon da war keinen Fehler Melden ---
   	else
   	{
   		cur = full.Mid(0,ende);
   		if (CreateDirectory(cur,NULL) == 0 && GetLastError() != 183)
 			//--- Scheitern bereits jetzt --- voller Schmach zurück ---
   			return 0;
   		else
   			//--- weitere Unterordner anlegen ---
   			return CreateMyFolder(full,cur,conf);
   	}
   	
   	return 0;
   }

Musst ja nicht kopieren - aber vielleich als kleine Anregung ^__^
Der Fehler 183 bedeutet, dass das verzeichniss schon da ist glaube ich und dann gibt es da noch den Fehler 5 - der kommt wenn man versucht "c:\" anzulegen (glaube ich auch nur ^_^° )

Das ganze geschieht rekursiv
Damit das ganze nicht ganz so einfach wird: Bekommt die Funktion einen relativen Pfag dann steht in der Klasse EINSTELLUGEN der aktuelle programmpfad zum ergänzen - also einfach umbauen oder so - wie dus brauchst.

Bei einem Fehler gibt die Funktion FALSE (0) zurück - den genauen FEhlercode bekommst du dann mit Standard "GetLastError()"

M.f.G. Erik
 
Zuletzt bearbeitet:
Danke für die Antwort. Ich dachte mir schon, daß ich nicht der einzige bin, der vor diesem Problem steht oder stand. Um so mehr wundert es mich, daß es da in den MFC oder im SDK keine fertige Funktion für so ein 'Allerweltsproblem' gibt.
 
Zurück