This is my version:
function MExtractFileName(const Name: String): String; var I: Integer; begin I:= Length(Name); while (I > 0) and (Name[I] <> '.') do Dec(I); if I = 0 then Result:= Name else Result:= Copy(Name, 1, I-1); end; function MValidFileName(AFileName: String): Boolean; const InvalidChar: array[0..8] of Char = ('\', '/', ':', '*', '?', '"', '<', '>', '|'); InvalidWords: array[0..21] 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 I, J, L: Integer; begin Result:= False; L:= Length(AFileName); if (L = 0) or (L > 255) or (AFileName[L] = '.') or (AFileName[L] = ' ') then Exit; for I:= 1 to L do begin if (AFileName[I] < ' ') then Exit; for J:= 0 to 8 do if AFileName[I] = InvalidChar[J] then Exit; end; AFileName:= UpperCase(TrimRight(MExtractFileName(AFileName))); for I:= 0 to 21 do if AFileName = InvalidWords[I] then Exit; Result:= True; end;
Marus nebunu
source share