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?


Delphi FAQ