Einzelnen Beitrag anzeigen

Benutzerbild von MacGuyver
MacGuyver

Registriert seit: 9. Sep 2003
Ort: Wildeshausen
293 Beiträge
 
Turbo Delphi für Win32
 
#1

DOS und lange Dateinamen

  Alt 27. Apr 2013, 21:10
Ich arbeite immer noch mit Turbo Pascal 7.0 an einer alten Anwendung. Die Anwendung läuft mittlerweile bei fast allen Kunden als 32-Bit-Anwendung. Leider nur fast, die Konvertierung (Konvertiere TP7 zu Delphi) lief gut, nur gibt es doch ein kleines Problem. Ist egal, jetzt geht es um eine andere Geschichte:
Ich möcht im AppData-Verzeichnis in einem Unterordner vom Dosprogramm aus etwas abspeichern. Problem ist nur, ich habe nur einen Verzeichnisnamen, der nicht nach der 8.3 Regel ist. Nun muss ich die Angabe in 8.3 konvertieren. Hier und vielerorts habe ich nur spartanisch etwas gefunden. Hier der Link zu meinem Fund.
Geschnitzt habe ich dann diesen Code draus:
Delphi-Quellcode:
{$IFNDEF Win32}
function LongPathToShortPath(aPath : ShortString):ShortString;
var
  s : string;
  reg : Registers;
begin
  aPath := aPath + #0;
  FillChar(s, 255, #0);
  s[0] := #255;
  FillChar(reg, SizeOf(reg), #0);
  reg.AX := $7160;
  reg.CL := $01; { 1: Canonicalize path/file name (all short) }
  reg.DS := LongInt(@aPath[1]) shr 16;
  reg.SI := LongInt(@aPath[1]) and $FFFF;
  reg.ES := LongInt(@s[1]) shr 16;
  reg.DI := LongInt(@s[1]) and $FFFF;
  Intr($21, reg);
  Delete(s, Pos(#0, s), 255);
  LongPathToShortPath := s;
end;

function ShortPathToLongPath(aPath : ShortString):ShortString;
var
  s : string;
  reg : Registers;
begin
  aPath := aPath + #0;
  FillChar(s, 255, #0);
  s[0] := #255;
  FillChar(reg, SizeOf(reg), #0);
  reg.AX := $7160;
  reg.CL := $02; {  Canonicalize path/file name (all long) }
  reg.DS := LongInt(@aPath[1]) shr 16;
  reg.SI := LongInt(@aPath[1]) and $FFFF;
  reg.ES := LongInt(@s[1]) shr 16;
  reg.DI := LongInt(@s[1]) and $FFFF;
  Intr($21, reg);
  Delete(s, Pos(#0, s), 255);
  ShortPathToLongPath := s;
end;
{$ENDIF}
Falls jemand etwas zum Thema LFN - "Long File Name" sucht, hat er hier etwas zu finden.
Englisch eine Weltsprache? Zu kompliziert und der nahe Osten würde Englisch als Pflichtweltsprache nicht akzeptieren.
IDO wäre genau das Richtige: http://forum.idolinguo.de/index.php oder www.idolinguo.de
  Mit Zitat antworten Zitat