![]() |
Unterverzeichnis überprüfen
Hallo!
Ich parse mittels einer Rekursiven Funktion ein Verzeichnis und deren Unterverzeichnisse. Ich verschiebe die Dateien dann entsprechend. Der User kann Quell- und Zielverzeichnis angeben. Jedoch darf das Zielverzeichnis nicht Unterverzeichnis des Quellverzeichnisses sein, da sonst eine Endlosschleife entsteht. Wie kann ich überprüfen, ob ein Verzeichnis Unterverzeichnis eines anderen Verzeichnisses ist? Grüße Faux |
Re: Unterverzeichnis überprüfen
Hallo Faux,
sobald du mit kanonischen Dateinamen arbeitest, ist ein Verzeichnis sub ein Unterverzeichnis vom Verzeichnis dir, wenn gilt:
Delphi-Quellcode:
Weihnachtsgrüße vom marabu
CompareText(Copy(sub, 1, Length(dir)), dir) = 0
|
Re: Unterverzeichnis überprüfen
Zitat:
mal so ins Blaue gedacht. Wenn ein Verzeichniss (V2) ein Unterverzeichniss eines anderen (V1) ist bedeutet dies doch das der String V1 komplett ein Bestandteil von V2 ist.
Delphi-Quellcode:
Edit: Da war marabu mal wieder schneller :cry:
procedure TForm1.Button1Click(Sender: TObject);
var V1 : String; V2 : String; begin V1 := 'c:\sharky\blubb\'; V2 := 'c:\sharky\blubb\meow'; If Pos(V1,V2) = 1 then begin ShowMessage('V2 ist ein Unterverzeichniss von V1'); end; end; |
Re: Unterverzeichnis überprüfen
Danke für die Antwort!
Das habe ich mir im ersten Augenblick auch gedacht, was ich aber hiermit: V1: C:\Documents and Settings\User\Dir V2: C:\Docume~1\User\Dir\Subdir oder hiermit: V2: %userprofile%\Dir\Subdir Gibts da nicht einen Algorithmus, der das überprüft. Also nicht "errechnet" sondern wirklich "nachsieht" ob das kein SubDir ist. Grüße Faux |
Re: Unterverzeichnis überprüfen
Kanonisieren kannst du mit den Funktionen GetFullPathName(), GetLongPathName() und GetShortPathName(). Wenn dabei nicht schon expandiert wird, dann hilft dir vielleicht noch das hier:
Delphi-Quellcode:
marabu
function ExpandEnvStr(const szInput: string): string;
begin SetLength(Result, ExpandEnvironmentStrings(pChar(szInput), nil, 0)); ExpandEnvironmentStrings(pChar(szInput), @Result[1], Length(Result)); end; |
Re: Unterverzeichnis überprüfen
OK. So weit so gut.
Kann mir mal wer ein Beispiel geben, wie man das lösen kann? Ich komme auf keinen grünen Zweig. Bsp: V1: C:\Verzeichnis\Name\Unterverzeichnis V2: C:\Anderes Verzeichnis\Name\Unterverzeichnis\Ende Wie würdet ihr das hier lösen? Danke schon mal. Grüße Faux |
Re: Unterverzeichnis überprüfen
Die oben genannten Varianten könnte unter Umständen dennoch bei Netzlaufwerken, symbolischen Links, oder änlichen Dingen Probleme bekommen.
Am einfachsten wird es wohl sein, wenn du im Zielverzeichnis eine eindeutige Datei erstellst únd dann im Quellverzeichnis danach suchst, ist die da nicht vorhanden, dann ist das Zielverzeichnis nicht im Quellverzeichnis drin. Und wenn die Datei doch gefunden wird, dann würde ich zur Sicherheit diese mal verändern (Dateiname, Dateiinhalt und/oder ...), um sicher zu gehn, daß es sich wirklich um die Selbe Datei handelt. Eine andere Lösung wäre, wenn man erstmal eine Liste aller Dateien erstellst, die kopiert werden sollen, und erst dann diese kopierst. Dann gibt es keine Endlosschleife und man kann dennoch die Dateien/Verzeichnisse in ein Unterverzeichnis kopieren ^^ |
Re: Unterverzeichnis überprüfen
Zitat:
Das ist die einfachste Lösung - Die hab ich jetzt genommen. ;) Grüße Faux |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz