Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Rekursiv Ordnerstrukturen kopieren

Empfohlene Antworten

Veröffentlicht

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.

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.

  • Autor

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?

  • Autor

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(); 

}


Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.