[Delphi] 8.3-Konformität prüfen

AndrewPoison

Admiral
Dabei seit
Jan. 2005
Beiträge
8.273
Hiho alle, hoffe es sind zu dieser Zeit schon ein paar Leutchen wach nach Weihnachten ;)

Jedenfalls: ich suche eine Möglichkeit, eine noch nicht existierende Datei und deren kompletten Pfad auf 8.3-Konformität zu prüfen. Meine bisherige Funktion dafür ist nur mit einer gaaaaanz simplen Checkweise ausgestattet, die natürlich fast nie funktioniert (sie prüft einfach, ob der Dateiname länger als 12 Zeichen (8 Dateiname + 1x"." + 3 Endung) ist, wenn ja ist sie ungültig). Dabei lässt sie erstmal die Möglichkeit ausser acht, das ja jemand auch Dateinamen mit kurzem Anfang, aber langer Endung angeben könnte, geschweige denn das der Pfad, in welchem die Datei gespeichert wird, Leerzeichen enthält oder selbst gegen die 8.3-Konventionen verstößt) Da ich in meinem Programm mit alten DOS-Programmen kommunizieren muss, komm ich um die 8.3-Konventionen leider nicht herum.

Das geschieht im Moment, wenn jemand ein Dokument abspeichern will, dass dann per Parameter an das DOS-Programm übergeben werden muss:

Code:
[B] procedure[/B] TForm1.Speichernunter1Click(Sender: TObject);
[B]var[/B]
 x: integer;
 [B]label[/B] REDOIT;
[B] begin[/B]
 REDOIT:
 [B]If[/B] SaveDialog1.Execute [B]then[/B]
 [B]begin[/B]
  [B]if[/B] CheckFor83Condition(ExtractFileName(SaveDialog1.FileName)) [B]then[/B]
  [B]begin[/B]
    [COLOR=SeaGreen][I]// mache dies und jenes...[/I][/COLOR]
  [B]end[/B]
  [B]else[/B]
  [B]begin[/B]
   MessageBox([COLOR=Blue]0[/COLOR],[COLOR=Red]'Bitte beachten sie die 8.3-Konventionen beim Speichern.'[/COLOR],[COLOR=Red]'8.3-Konventionen beachten!'[/COLOR],[COLOR=Blue]0[/COLOR]);
   [B]goto[/B] REDOIT;
  [B]end[/B];
 [B]end[/B];
[B]end[/B];
(Hinweis: die nicht verwendete Variable X musste ich deklarieren, weil der Compiler mir sonst aus unerfindlichen Gründen das Label im VAR-Teil nicht akzeptiert.)

Ich hatte ja schon die Idee, den Pfad und Dateinamen, den SaveDialog1.Filename zurückgibt, einfach auf Gleichheit mit ExtractShortPathName(SaveDialog1.Filename) zu prüfen. Wenn beide identisch sind, wäre der Dateiname und Pfad auf jeden Fall 8.3-Konform. Allerdings muss die Datei in diesem Fall schon existieren, und ein "testweises" erstellen und prüfen wollte ich in meinem Code eigentlich nicht haben.

Dann dachte ich mir, das ich die Parameter (der Filename des zu speichernden Files) an die DOS-Programme einfach in doppelten Anführungszeichen übergebe, aber die sind soo alt, da klappt selbst das nicht.

Auch diverse Einstellungen in dem SaveDialog an sich brachten nichts (etwa ofNoLongNames).

Gibt es eine Funktion, die zumindest mit hoher Sicherheit überprüfen kann, ob ein noch nicht existenter Pfad 8.3-Konform wäre? Es müsste ja die Länge jedes einzelnen Ordners, darin enthaltene Sonderzeichen, Leerzeichen etc. geprüft werden.
 
Zuletzt bearbeitet:

AndrewPoison

Admiral
Ersteller dieses Themas
Dabei seit
Jan. 2005
Beiträge
8.273
Niemand ne Idee? Oder wart ihr nur die Feiertage zu beschäftigt? ;)

Möchte dem Thread nochmal eine kleine Chance geben, aber wenn wieder niemand antwortet... naja dann kanner auch weg :/
 
Top