Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Path in seine Unter-Ordner zerlegen (https://www.delphipraxis.net/167673-path-seine-unter-ordner-zerlegen.html)

bernhard_LA 12. Apr 2012 11:22

Path in seine Unter-Ordner zerlegen
 
gibt es eigentlich schon Funktionen in Delphi um aus einem Pfad die einzelnen Unterorder zu extrahieren
ich dachte an eine Funktion wie ....
  1. GetSubFolderName('c:\temp\test\heute\demo', 0) ergibt dann c:
  2. GetSubFolderName('c:\temp\test\heute\demo', 1) ergibt dann c:\temp\
  3. GetSubFolderName('c:\temp\test\heute\demo', 2) ergibt dann c:\temp\test\
    ....

s.h.a.r.k 12. Apr 2012 11:24

AW: Path in seine Unter-Ordner zerlegen
 
Naja, das wäre rein logisch eher falsch:
Delphi-Quellcode:
GetSubFolderName('c:\temp\test\heute\demo', 0) ergibt dann c:
C: ist ja ein Laufwerk, wenn man es genau nimmt und ein Ordner.

Aber andere Frage: Wieso brauchst du sowas? Kann mir kein Fall vorstellen, bei dem ich speziell auf den dritten Unterordnername eines Pfades zugreifen will.

Bummi 12. Apr 2012 11:27

AW: Path in seine Unter-Ordner zerlegen
 
Wobei der Ansatz nicht optimal ist...
Delphi-Quellcode:
Function GetPolderPart(const s:String;Index:Integer):String;
var
 sl:TStringList;
begin
  sl := TStringList.Create;
  try
    sl.Delimiter := '\';
    sl.DelimitedText := s;
    if Index < sl.Count then Result := sl[index ] else Result := '';
  finally
    sl.Free;
  end;
end;

Popov 12. Apr 2012 11:28

AW: Path in seine Unter-Ordner zerlegen
 
Es gibt ProcessPath, der zerlegt den Pfad in Laufwerk, Verzeichnis und Dateiname. Wenn du es genauer willst, dann einfach das Verzeichnis zerlegen.

DeddyH 12. Apr 2012 12:00

AW: Path in seine Unter-Ordner zerlegen
 
Zitat:

Zitat von Bummi (Beitrag 1161467)
Wobei der Ansatz nicht optimal ist...
Delphi-Quellcode:
Function GetPolderPart(const s:String;Index:Integer):String;
var
 sl:TStringList;
begin
  sl := TStringList.Create;
  try
    sl.Delimiter := '\';
    sl.DelimitedText := s;
    if Index < sl.Count then Result := sl[index ] else Result := '';
  finally
    sl.Free;
  end;
end;

AFAIK ist auch der Slash mittlerweile ein gültiger Trenner, und Du hast StrictDelimiter vergessen, sonst kommt bei Pfaden mit Leerzeichen ein falsches Ergebnis.

bernhard_LA 12. Apr 2012 12:02

AW: Path in seine Unter-Ordner zerlegen
 
die Anwendung :

habe nach einem Datencrash von Festplatte und BackupPlatte (Hingen am selben HD Controller :-( ) und viel Aufwand für Daten recovery jetzt zwei halbe Versionen meiner Daten

baue gerade eine merger & recovery app

for each Folder in datenrettung 1
prüfe alle Files in Ordner ....
schaue mal im referenzordner in Datenrettung #2
kopiere nach besten wissen und gewissen in ein neues Target
end;


kann jemand ein fertiges Tool hierfür ...

DeddyH 12. Apr 2012 12:10

AW: Path in seine Unter-Ordner zerlegen
 
Entweder rekursiv mit FindFirst/FindNext durchgehen oder SHFileOperation, das müsste recht einfach zu machen sein, wenn es um das reine Kopieren geht.

Bummi 12. Apr 2012 12:21

AW: Path in seine Unter-Ordner zerlegen
 
@DeddyH
Du hast wie immer Recht, ich traue mich bald nicht mehr etwas zu schreiben ...

DeddyH 12. Apr 2012 12:29

AW: Path in seine Unter-Ordner zerlegen
 
Och, mir geht das auch öfter so in letzter Zeit ;)

himitsu 12. Apr 2012 12:36

AW: Path in seine Unter-Ordner zerlegen
 
C: währe eigentlich nicht richtig, da daß \ dort eigentlich noch dazugehört, denn sonst währe es ein relativer Pfad (aktuelles Arbeitsverzeichnis dieses Laufwerks)

Recursiv über ExtractFilePath/ExtractFileDir ließe sich der String vermutlich sicherer aufteilen.



Und das Tool:
Enthält mindestens eines der Verzeichnisse nur korrekte Daten? (keine defekten Dateien)
Wenn ja, dann nimm den Explorer und kopier dieses Verzeichnis in das Andere hinein.
(am Sicheresten das Verzeichnis in eine Kopie des anderen Verzeichnisses)


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:43 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz