Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Neuen Beitrag zur Code-Library hinzufügen (https://www.delphipraxis.net/33-neuen-beitrag-zur-code-library-hinzufuegen/)
-   -   Delphi Verzeichnis aus Dateinamen extrahieren (https://www.delphipraxis.net/134248-verzeichnis-aus-dateinamen-extrahieren.html)

HeikoAdams 18. Mai 2009 14:33


Verzeichnis aus Dateinamen extrahieren
 
Um den Namen des Verzeichnisses (ohne den restlichen Pfad), in dem eine Datei gespeichert ist, zu extrahieren, ist folgende Funktion nutzbar:

Delphi-Quellcode:
function GetFileDir(const aBasepath, aFilename: string): string;
begin
   Result := Copy(aFilename, Length(aBasepath) +1,
      PosEx('\', aFilename, Length(aBasepath) + 1) - Length(aBasepath));
end;

hoika 18. Mai 2009 14:37

Re: Verzeichnis aus Dateinamen extrahieren
 
Hallo,

oder ExtractFilePath benutzen.


Heiko

HeikoAdams 18. Mai 2009 15:10

Re: Verzeichnis aus Dateinamen extrahieren
 
Zitat:

Zitat von hoika
oder ExtractFilePath benutzen

Eben nicht. ExtractFilePath liefert - wie der Name schon sagt, den kompletten Pfad. Meine Funktion liefer nur den Namen des Verzeichnisses.

DeddyH 18. Mai 2009 15:14

Re: Verzeichnis aus Dateinamen extrahieren
 
Aber
Delphi-Quellcode:
ExtractFilename(ExcludeTrailingPathDelimiter(ExtractFilePath(aFilename)));
sollte gehen. Besonders dolle ist das allerdings nicht, geb ich zu.

Satty67 18. Mai 2009 15:30

Re: Verzeichnis aus Dateinamen extrahieren
 
Man muss folgendes übergeben:

C:\meineApplikation\
C:\meineApplikation\meineDaten\meineDatei.txt

um dann meineDaten zu bekommen?

Mein Vorschlag, da ich kein PosEx habe:
Delphi-Quellcode:
function GetFileDir(const aBasepath, aFilename: string): string;
begin
  Result := ExtractFilePath(aFileName);
  Delete(Result, 1, Length(aBasePath));
end;
ExcludeTrailingBackslash, falls man D5 hat und den Backslash nicht will

@:DeddyH
Wenn mehr als ein Ordner-Zweig zw. aBasepath und aFilename liegt, wird das nix.

DevilsCamp 18. Mai 2009 15:36

Re: Verzeichnis aus Dateinamen extrahieren
 
Zitat:

Zitat von Satty67
Man muss folgendes übergeben:

C:\meineApplikation\
C:\meineApplikation\meineDaten\meineDatei.txt

um dann meineDaten zu bekommen?

Mein Vorschlag, da ich kein PosEx habe:
Delphi-Quellcode:
function GetFileDir(const aBasepath, aFilename: string): string;
begin
  Result := ExtractFilePath(aFileName);
  Delete(Result, 1, Length(aBasePath));
end;
ExcludeTrailingBackslash, falls man D5 hat und den Backslash nicht will

Und wie berechnest du
C:\meineApplikation\
wenn der Pfad der Datei in einem Edit-Feld angegeben wird? :gruebel:

Satty67 18. Mai 2009 15:44

Re: Verzeichnis aus Dateinamen extrahieren
 
Zitat:

Zitat von DevilsCamp
Und wie berechnest du

Alles vor "Mein Vorschlag" war nur eine Feststellung, was der Code des Ausgangsposters meiner Meinung nach macht. Der erwartet scheinbar einen bereits bekannten BasePath.

Ginge es nur um den direkt übergeordneten Ordner der Datei, könnte man sich die Übergabe von aBasePath ja gleich sparen.

DevilsCamp 18. Mai 2009 15:52

Re: Verzeichnis aus Dateinamen extrahieren
 
Zitat:

Zitat von Satty67
Zitat:

Zitat von DevilsCamp
Und wie berechnest du

Alles vor "Mein Vorschlag" war nur eine Feststellung, was der Code des Ausgangsposters meiner Meinung nach macht. Der erwartet scheinbar einen bereits bekannten BasePath.

Ginge es nur um den direkt übergeordneten Ordner der Datei, könnte man sich die Übergabe von aBasePath ja gleich sparen.

Sorry, ich war irgendwie der Meinung, dass ich den Thread-Ersteller zitiere :)

Aber zurück zum OT:
Der Thread-Ersteller möchte den Verzeichnisnamen des Verzeichnisses bekommen, in dem die Datei liegt. Daher müsste gelten:
Delphi-Quellcode:
aBasepath := ExtractFilePath(aFilename)
Das liefert allerdings immer einen leeren string, weil das dritte Argument von Copy eine negative Zahl ist (weil PosEx in dem Fall immer 0 zurück gibt). Und in dem Fall wäre der Vorschlag von DeddyH vielleicht nicht die schönste, aber eine schnelle Lösung.

Man könnte z.B. auch aFilename an den '\' splitten und in ein Array speichern und anschliessend
Delphi-Quellcode:
ArrayVar[High(ArrayVar) - 1]
zurück geben (ArrayVar[High(ArrayVar)] ist ja dann der Dateiname selber) :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:47 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