peter_lustich_kanns Geschrieben 30. Januar 2009 Teilen Geschrieben 30. Januar 2009 Aloa mein Mitstreiter, die ist mein erster Beitrag und ich hoffe doch auf rege Beteiligung: 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 30. Januar 2009 Teilen Geschrieben 30. Januar 2009 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
peter_lustich_kanns Geschrieben 30. Januar 2009 Autor Teilen Geschrieben 30. Januar 2009 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
peter_lustich_kanns Geschrieben 2. Februar 2009 Autor Teilen Geschrieben 2. Februar 2009 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(); } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.