AGB  ·  Datenschutz  ·  Impressum  







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

Pfade vegleichen...

Ein Thema von MrDevil · begonnen am 25. Mär 2007 · letzter Beitrag vom 25. Mär 2007
Antwort Antwort
Seite 1 von 2  1 2      
MrDevil

Registriert seit: 27. Dez 2006
Ort: Melle
62 Beiträge
 
Delphi 5 Standard
 
#1

Pfade vegleichen...

  Alt 25. Mär 2007, 14:31
Ich habe in 2 Strings 2 Pfadangaben

s1 := 'C:\Test\T1';
s2 := 'C:\Test\T1\Z';

Beim kopieren des Verzeichnisses s1 kopiere ich ja automatisch auch alle Unterordner AUCH den Z ordner mit,

Also bräuchte ich s2 selsbt gar nicht mehr als kopiervorgang starten da ja Z in s1 enthalten ist.

So, wie überprüfe ich ob die Pfadangabe s2 schon in s1 enthalten ist?!
Gruss Jens
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Pfade vegleichen...

  Alt 25. Mär 2007, 14:32
Hi

Das könntest du mit Delphi-Referenz durchsuchenPos lösen.
  Mit Zitat antworten Zitat
MrDevil

Registriert seit: 27. Dez 2006
Ort: Melle
62 Beiträge
 
Delphi 5 Standard
 
#3

Re: Pfade vegleichen...

  Alt 25. Mär 2007, 14:35
dachte ich mir schon, nur habe ich keinen plan wie das gehen soll da ich mir das gerade recht aufwendigvorstelle.
da ich ja nicht weiß wie lang der Pfad ist ergo kann ich ja nicht nach "/" suchen


warscheinlich denke cih zu kompliziert
Gruss Jens
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

Re: Pfade vegleichen...

  Alt 25. Mär 2007, 14:37
Hi,

Du könntest entweder solange nach '/' suchen bis kein '/' mehr da ist (posex) oder du drehst den String um und suchst dann nach dem '/'

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Pfade vegleichen...

  Alt 25. Mär 2007, 14:41
Nur schnell hingetippt:

Delphi-Quellcode:
function PathIncluded(Path1, Path2: string; var MainPath: string): Boolean;
begin
  Path1 := IncludeTrailingBackslash(Path1);
  Path2 := IncludeTrailingBackslash(Path2);

  if Length(Path1) < Length(Path2) then
  begin
    if Pos(Path1, Path2) = 1 then
    begin
      MainPath := Path1;
      result := true;
    end;
  end
  else if Length(Path1) > Length(Path2) then
  begin
    if Pos(Path2, Path1) = 1 then
    begin
      MainPath := Path2;
      result := true;
    end;
  end else
    result := false;
end;
Das liefert dir true zurück, falls der eine Pfad im anderen enthalten ist und über den var-Parameter MainPath wird der "Hauptpfad" zurückgegeben.
  Mit Zitat antworten Zitat
MrDevil

Registriert seit: 27. Dez 2006
Ort: Melle
62 Beiträge
 
Delphi 5 Standard
 
#6

Re: Pfade vegleichen...

  Alt 25. Mär 2007, 14:42
Hmm ok aber immer noch nen Denkblockade...

wenn ich solange nach / suche: bringt mich das nciht weiter da der letzte ja nicht unbedingt das sein muss was ich suche
Beispiel:

C:\Test\T1\Z\G\d

wenn ich dann nach dem letzen \ suche ist das noch lange nicht true mit C:\Test\T1

natürlich wenn der Pfad nur C:\Test\T1\Z wäre dann verstehe ich das mit der pos geschichte



Edit: @matze

Danke werde ich mal testen und versuchen zu verstehen...
Gruss Jens
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Pfade vegleichen...

  Alt 25. Mär 2007, 14:44
Habe gerade noch etwas hinzugefügt. Getestet habe ich diese Funktion allerdings nicht.
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#8

Re: Pfade vegleichen...

  Alt 25. Mär 2007, 14:47
moin,

wenn du zwei Pfade hast, ermittelst du erst den kürzeren der beiden.
Anschließend vergleichst du den kleinen Pfad mit dem kopierten "längeren Pfad".
Sind beide gleich lang, kannst du direkt vergleichen.

Code:
s1: "C:\test\a" // langer Pfad
s2: "C:\test\" // kurzer Pfad

s1': copy(s1, 1, Length(s2))

CompareText(s1, s2')
Als Denkanstoss sollte das genügen...
  Mit Zitat antworten Zitat
MrDevil

Registriert seit: 27. Dez 2006
Ort: Melle
62 Beiträge
 
Delphi 5 Standard
 
#9

Re: Pfade vegleichen...

  Alt 25. Mär 2007, 14:49
@matze

Super danke - dafür das du es nur hingeschrieben hast ist das super funktionierend... und ich habe mein Fehler beim denken auch bemerkt . ich kann mit POS ja nen Ganzen Pfad vergleichen... ... hatte immer nur sowas wie nach \ suche im Kopf
Danke!
Gruss Jens
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Pfade vegleichen...

  Alt 25. Mär 2007, 15:02
Auch nich getestet, aber ich glaub so in etwa hatte ich das geleöst.
Funktioniert auch mit relativen Pfaden,
nicht mit UNC-Namen und auch nicht mit den eigebetteten NTFS-Laufwerken/Netzwerkfreigaben).
Und dann fehlt hier auch noch der Teil für die 8.3-Dateinamen, also die langen/kurzen Nmen wie "abcdefghijklm.nop" <> "abcdef~1.nop".
Delphi-Quellcode:
Function PathIncluded(Check, MainDir: String): Boolean;
  Var i: Integer;

  Begin
    Result := False;
    Check := AnsiLowerCase(ExpandUNCFileName(ExcludeTrailingBackslash(Check)));
    MainDir := AnsiLowerCase(ExpandUNCFileName(ExcludeTrailingBackslash(MainDir)));
    i := Min(Length(Check), Length(MainDir));
    If Length(Check) <= i Then Exit;
    Result := (Check = Copy(MainDir, 1, i))
      and ((Length(MainDir) = i) or (MainDir[i + 1] = '\'));
  End;


s1 := 'C:\Test\T1';
s2 := 'C:\Test\T1\Z';
If PathIncluded(s2, s1) Then ...

[add]
stimmt, ExpandUNCFileName gab's ja och noch ... hatte nur noch ExpandFileName im Kopf.

@bigg:
bei dir wäre ein IncludeTrailingBackslash nicht schlecht, denn wenn mal keiner in s2 drin ist, dann gibt's da Probleme

Bei Diesem wird sonst auch TRUE gesagt:
Delphi-Quellcode:
s1: "C:\test\abc" // langer Pfad
s2: "C:\test\a" // kurzer Pfad
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 05:41 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