Zum Inhalt springen

Rekursiv Ordnerstrukturen kopieren


Empfohlene Beiträge

Aloa mein Mitstreiter, die ist mein erster Beitrag und ich hoffe doch auf rege Beteiligung::rolleyes:

ich Schreibe grad an einem Programm in C++ (mit dem VS2005), dass mir komplette Verzeichniss-Strukturen von einer CD zu einem beliebigen Ort kopieren soll.

Ich komme bis jetzt auch gut voran, nur stellt sich mir folgendes Problem in den Weg:

Die Möglichkeit Dateien von a nach b zu bekommen habe ich gelöst.


void DInstall::FileFind(CString Path)

{ 

 CFileFind finder; 

 CString Temp,Folder,DataSource,DataDestination;

 int sLaenge,nCount;

 Temp.Format("%s*.*",Path); 

 BOOL bWorking = finder.FindFile(Temp); 

 while (bWorking) 

 { 

	bWorking = finder.FindNextFile(); 

	if(finder.IsDirectory())

            {

	//in diesem gefundenen Verzeichnis nun nach Dateien suchen

            }

	else 

	{ 

             	DataSource=finder.GetFilePath();

		DataDestination=finder.GetFileName();

		Source.Format(DataSource);

		Destination.Format("%s\\%s",CopyPath,DataDestination);

		sLaenge=Source.GetLength();

		OnCopyFile(Source,Destination);

	} 

 }

 finder.Close(); 

}

Aber, eine mittelschweres bis großes aber eigentlich, wenn jetzt nun if(finder.IsDirectory()) = True, bekomme ich nicht den Namen, des Directory, sondern nur so nen ollen Punkt als Wiedergabewert. mit dem kann aber nichts anfangen^^^... Kann mir einer sagen wie ich das hinbekomme, dass ich den Namen der Ordners erhalte??? Zur Info. Die Namen der Ordner sind mir bekannt, es sins aber ziemlich viele Ordner, die jeweils auch unterordner haben.

Ziel soll es sein, dass ich die selbe Funktion void DInstall::FileFind(CString Path) nochmal aufrufe und zwar mit dem Namen des erhaltenen Ordners...

ich bin am verzweifeln...

und BITTE, Funktionen wie MoveFile() kommen nicht in Frage, denn ich habe sie alle getestet und da kam auch nur Müll bei raus....

vielen Dank im Vorraus.

Link zu diesem Kommentar
Auf anderen Seiten teilen

wenn jetzt nun if(finder.IsDirectory()) = True, bekomme ich nicht den Namen, des Directory, sondern nur so nen ollen Punkt als Wiedergabewert. mit dem kann aber nichts anfangen^^^... Kann mir einer sagen wie ich das hinbekomme, dass ich den Namen der Ordners erhalte???
Das ist der Name eines Ordners. Jeder Ordner enthält den Unterordner "." (für den Ordner selbst) und, falls vorhanden, ".." für den übergeordneten Ordner.

Die musst du einfach überspringen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hey Klotzkopp vielen Dank für deine schnelle Antwort, dies freut mich sehr^^,

wie du es so schreibst kommt mir grad die Erinnerung daran, dass der Debugger einaml zu viel durchgelaufen ist, was auf deine Antwort schließen lässt. Ist auch irgendwie einleuchtend, denn "../." kennt man schon aus der cmd. Und der Rückgabewert "." ist mir in dem Moment nicht in dem Zusammenhang in den Sinn gekommen.:upps - aber sehr gut zu Wissen.

Kann ich denn dann davon ausgehen, dass beim 2 Durchlauf von...


while (bWorking) 

 { 

	bWorking = finder.FindNextFile(); 

	if(finder.IsDirectory())

            {

...der erste Verzeichnissname aus dem Ordner Path zurück kommt?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also für alle die es interessiert. Ja der Compiler geht soweit durch die Liste der aller im Ordner x befindlichen Dateien und Ordner durch, wobei man allerding sich nicht von den Dateinamen irrietieren lassen sollte. Wenn man beispielsweise im Ordner namens "2" die Dateien "2.*" und "2_2.*" sowie einen weiteren Unterordner names "21" findet der Compiler logischer Weise als erstes die Datei "2.*", dann den Ordner "21" und als letztes die Datei "2_2.*". Was aber nichts ausmacht, denn die Datei "2_2.*" wird nach dem Durchlauf der Funktion auch kopiert.

Nun der Code der dies ermöglicht:



void DInstall::FileFind(CString sSuchPath, CString sZielDateiName, CString sTempDestinationPfad)

{ 

CFileFind finder; 

CString sTemp,sTemp2,sTemp3,sTemp4,sFolder,sDataSource,sDataDestination,sDestinationPath;

sDestinationPath.Format("%s",CopyPath);


if(sZielDateiName!="")

{

  if(sTempDestinationPfad!="")

  {

    sTemp4.Format("%s\\%s",sTempDestinationPfad,sZielDateiName);

    sDestinationPath = sTemp4;

    _mkdir(sDestinationPath);		

  }

}


sTemp.Format("%s*.*",sSuchPath); 

BOOL bWorking = finder.FindFile(sTemp); 

while (bWorking) 

{ 

  bWorking = finder.FindNextFile(); 

  if(finder.IsDirectory())

  {

    sTemp2.Format(finder.GetFileName());

    if(finder.GetFileName()!=".")

    {

       if(finder.GetFileName()!="..")

       {

	 sTemp2.Format("%s\\",finder.GetFilePath());

	 sTemp3.Format("%s",finder.GetFileName());

	 FileFind(sTemp2,sTemp3,sDestinationPath);

       }

    }			

  }

  else 

  { 

    sDataSource=finder.GetFilePath();

    sDataDestination=finder.GetFileName();

    sSource.Format(sDataSource);

    sDestination.Format("%s\\%s",sDestinationPath,sDataDestination);

    OnCopyFile(sSource,sDestination);

    sDataSource="";

    sDataDestination="";

    sSource="";

    sDestination="";

  } 

 }

finder.Close(); 

}


Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...