AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DOS und lange Dateinamen

Ein Thema von MacGuyver · begonnen am 27. Apr 2013 · letzter Beitrag vom 28. Apr 2013
 
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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz