Wie kann ich zu einer Datei den langen zw. kurzen Dateinamen ermitteln?
1. lang > kurz:
Mit der Funktion GetShortPathName ermittelt man aus einem langen Windows 95-Dateinamen den kurzen DOS-Dateinamen im Format 8.3. In LongName wird der (lange) Original-Dateinamen als PCHAR-String übergeben, der kurze 8.3-dateiname wird als Wert der Funktion zurückgegeben. MaxLength ist die maximal erlaubte Dateinamensgröße. Der Pfad muß mit übergeben werden und wird auch wieder in Result zurückgegeben.
function ShortFilename(LongName:string):string; var ShortName : PChar; begin ShortName:=StrAlloc(Max_Path); GetShortPathName(PChar(LongName), ShortName, Max_Path); Result:=string(ShortName); StrDispose(ShortName); end;
2. kurz > lang:
Zur Ermittlung eines langen Dateinamens aus einem kurzen (bzw. abgekürzten) empfiehlt sich diese Funktion, die auf der FindFirst-Routine basiert:
function GetLongPathName(APath:String):String;
var i : Integer;
h : THandle;
Data : TWin32FindData;
IsBackSlash : Boolean;
begin
APath := ExpandFileName(APath);
i := Pos('\',APath);
Result := Copy(APath,1,i);
Delete(APath,1,i);
repeat
i := Pos('\',APath);
IsBackSlash := i>0;
if Not(IsBackSlash) then
i := Length(APath)+1;
h:=FindFirstFile(PChar(Result+Copy(APath,1,i-1)),Data);
if h<>INVALID_HANDLE_VALUE then begin
try
Result := Result+Data.cFileName;
if IsBackSlash then
Result := Result+'\';
finally
Windows.FindClose(h);
end;
end else begin
Result := Result+APath;
Exit;
end;
Delete(APath,1,i);
until Length(APath)=0;
end; {Peter Haas}
| Delphi 1 | Delphi 2 | Delphi 3 | Delphi 4 |
| nicht getestet | Version nicht betroffen | getestet |
siehe auch:
Wie kann ich prüfen, ob ein Benutzer einen gültigen Dateinamen
eingegeben hat?