// Wenn man einen so genannten qualifizierten Dateinamen wie
// beispielsweise "
C:\Programme\WinZip\README.TXT" hat, kann man mit
// der Funktion "
ExtractFileName" den Dateinamen "README.TXT"
// herauslesen und mittels der Funktion "
ExtractFilePath"
//
("ExtractFileDir") den Pfad "C:\Programme\WinZip\". Diese Funktionen
// versagen aber, wenn man nur Laufwerk und Ordner ohne abschließenden
// Backslash übergibt. So erhält man bei "
C:\Programme\WinZip" als
// Dateiname
"Winzip", obwohl es ein Ordner ist, und als Pfad wird
// "
C:\Programme\" zurückgegeben. Der letzte Ordner wird einfach
// unterschlagen. Der zweite Nachteil ist
(meistens), dass nicht
// geprüft wird, ob Ordner und Datei überhaupt existieren. Dem allen
// kann man entgehen, wenn man die Prozedur "
ProcessPath" benutzt.
// Allerdings muss man beachten, dass bei fehlender Laufwerksangabe das
// aktuelle Laufwerk eingesetzt wird. Hier ein mögliches
// Anwendungsbeispiel:


// Getestet mit D4 unter XP

procedure TForm1.Button4Click(Sender: TObject); 
var 
  Drive: char; 
  Path, FilePart, DirPart: string; 
begin 
  Path := 'C:\Programme\WinZip\README.TXT'; 
  try 
    ProcessPath(Path, Drive, DirPart, FilePart); 
  except 
    Label1.caption := ''; 
    Label2.caption := ''; 
    Label3.caption := ''; 
    raise exception.create('Fehler in Pfadangabe'); 
  end; 
  Label1.caption := Drive; 
  Label2.caption := DirPart; 
  Label3.caption := FilePart; 
end;


// Mit diesem Wissen kann man (so man will) seine eigenen Funktionen
// für Pfade und/oder Dateinamen erstellen:

uses FileCtrl; 
 
function ExtractFilePathX(const Path: string; Meldung: boolean): string; 
var 
  Drive: char; 
  FilePart, DirPart: string; 
begin 
  try 
    ProcessPath(Path, Drive, DirPart, FilePart); 
  except 
    Result := ''; 
    if Meldung then 
      raise exception.create('Fehler in Pfadangabe') 
    else exit; 
  end; 
  result := Drive + ':' + Dirpart; 
  if ansilastchar(result) <> '\' then 
    result := result + '\' 
end; 

 
function ExtractFileNameX(const Path: string; Meldung: boolean): string; 
var 
  Drive: char; 
  DirPart: string; 
begin 
  try 
    ProcessPath(Path, Drive, DirPart, Result); 
  except 
    Result := ''; 
    if Meldung then 
      raise exception.create('Fehler in Pfadangabe'); 
  end; 
  if Meldung and (Result = '') then 
    raise exception.create('Keinen Dateinamen gefunden'); 
end; 
 
// Beispielaufruf 
 
procedure TForm1.Button5Click(Sender: TObject); 
begin 
  label1.caption := ExtractFilePathX('C:\Programme\WinZip', False); 
  label2.caption := ExtractFileNameX('C:\Programme\WinZip', True); 
end;



 

Zugriffe seit 6.9.2001 auf Delphi-Ecke