DateinameOK

Verweis: RenameFile Rewrite
Uses: StrUtils
Eingabe: Ein Dateiname(string)
Ausgabe: Gültig oder ungültig (Boolean)
Funktion: Überprüft einen String auf eine gültigen Dateinamen.

Diese von mir geschrieben Funktion überprüft einen Dateinamen. Dieser kann mit oder ohne Suffix übergeben werden. Jedoch ohne den Pfad oder dem Laufwerksbuchstaben. Was auch nicht überprüft wird, ist die Länge des Dateinamens. Denn ich denke das der Benutzer extrem ein an der Klatsche hat, wenn er sich einen Dateinamen ausdenkt, der länger als 255 Zeichen lang ist. Sowas würde ich vielliecht vorher Abfangen z.B. mit:

 edit1.MaxLength:=30;

Hier nun die Funktion:

function DateinameOK(ZuPruefenderName: string): boolean;
const
  IllegaleDateizeichen = '\/:*?"<>|';
  IllegalesWort: array[1..22] of string =
    ('CON', 'PRN', 'AUX', 'NUL', 'COM1',
    'COM2', 'COM3', 'COM4', 'COM5', 'COM6', 'COM7', 'COM8',
    'COM9', 'LPT1', 'LPT2',
    'LPT3', 'LPT4', 'LPT5', 'LPT6', 'LPT7', 'LPT8', 'LPT9');
var
  Legal: boolean;
  Treffer, z: integer;
begin
  Legal := True;
  for z := 1 to length(ZuPruefenderName) do
  begin
    if StrScan(IllegaleDateizeichen, ZuPruefenderName[z]) <> nil then
      Legal := False;
  end;
  ZuPruefenderName := ChangeFileExt(ZuPruefenderName, '');
  Treffer := AnsiIndexText(ZuPruefenderName, IllegalesWort);
  if Treffer >= 0 then
    Legal := False;
  Result := Legal;
end;

Aufgerufen wird das Ganze mit:

procedure TForm1.Button1Click(Sender: TObject);
begin
  if DateinameOK(edit1.Text) then
    ShowMessage('Dateiname ist ok.')
  else
    ShowMessage('Dateiname ist NICHT ok.');
end;

Natürlich sind die Messages in dem Beispiel-Aufruf nur ein Platzhalter, damit Sie sehen was passiert. Hier sind Sie gefragt. Bei okay nichts machen. Das ist schon mal klar und bei einem Fehler? Vielleicht ändern sie von sich aus den Namen von „:“ in „doppelpunkt“ wäre doch lustig oder Sie machen daraus ein „-“ oder Sie meckern und wählen das Edit1 Feld wieder aus. edit1.setfocus; überlegen sie sich was. Diese Funktion überprüft aber nicht ob schon eine Datei mit gleichem Namen existiert. Es geht hier nur um den gültigen Namen.