// 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;
|