AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Unterverzeichnis überprüfen

Ein Thema von faux · begonnen am 26. Dez 2005 · letzter Beitrag vom 26. Dez 2005
Antwort Antwort
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#1

Unterverzeichnis überprüfen

  Alt 26. Dez 2005, 09:12
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
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Unterverzeichnis überprüfen

  Alt 26. Dez 2005, 09:23
Hallo Faux,

sobald du mit kanonischen Dateinamen arbeitest, ist ein Verzeichnis sub ein Unterverzeichnis vom Verzeichnis dir, wenn gilt:

CompareText(Copy(sub, 1, Length(dir)), dir) = 0 Weihnachtsgrüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Unterverzeichnis überprüfen

  Alt 26. Dez 2005, 09:25
Zitat von faux:
... Wie kann ich überprüfen, ob ein Verzeichnis Unterverzeichnis eines anderen Verzeichnisses ist?
Hai Faux,

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:
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;
Edit: Da war marabu mal wieder schneller
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Unterverzeichnis überprüfen

  Alt 26. Dez 2005, 09:37
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
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Unterverzeichnis überprüfen

  Alt 26. Dez 2005, 09:55
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:
function ExpandEnvStr(const szInput: string): string;
begin
  SetLength(Result, ExpandEnvironmentStrings(pChar(szInput), nil, 0));
  ExpandEnvironmentStrings(pChar(szInput), @Result[1], Length(Result));
end;
marabu
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Unterverzeichnis überprüfen

  Alt 26. Dez 2005, 10:08
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
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 
#7

Re: Unterverzeichnis überprüfen

  Alt 26. Dez 2005, 10:50
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 ^^
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Unterverzeichnis überprüfen

  Alt 26. Dez 2005, 13:22
Zitat von himitsu:
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 ^^
Danke.
Das ist die einfachste Lösung - Die hab ich jetzt genommen.

Grüße
Faux
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:28 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