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?