--> Gibt es eine function, die checkt, ob ein filename überhaupt zulässig ist ?
so etwas wie: function validfilename(fname : string) : boolean;
validfilename
-
- Beiträge: 298
- Registriert: Di 23. Nov 2010, 23:41
- OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
- CPU-Target: 32Bit/64Bit
- Wohnort: Geldern
- Kontaktdaten:
Re: validfilename
ungefähr so:
Code: Alles auswählen
function IsValidFileName(const fileName : string) : boolean;
const InvalidCharacters : set of char = ['\', '/', ':', '*', '?', '"', '<', '>', '|'];
var cnt : integer;
begin
result := fileName <> '';
if result then
begin
for cnt := 1 to Length(fileName) do
begin
result := NOT (fileName[cnt] in InvalidCharacters) ;
if NOT result then break;
end;
end;
end;
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
-
- Beiträge: 958
- Registriert: Mo 11. Sep 2006, 22:56
Re: validfilename
Plattformübergreifend eher schwierig
für Windows sowas
http://stackoverflow.com/questions/3783 ... a-filename
für Windows sowas
http://stackoverflow.com/questions/3783 ... a-filename
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: validfilename
Hat mit der "Plattform" wenig zu tun,m sondern mit angesprochenen verwendeten Datei-System. In Linux kann man ja auch z.B. FAT verwenden, das seine eigenen Einschränkungen hat.creed steiger hat geschrieben:Plattformübergreifend eher schwierig
In einem "echten" Linux-Dateisystem (z.B. EXTx und NFS) ist - soweit ich weiß - jede Byte-Folge als Dateiname zulässig, die höchstens 255 Zeichen lang ist und keinen ASCII-Schrägstrich enthält.
Wie so ein Dateiname angezeigt wird, ist aber eine andere Frage und hat mit dem Dateisystem nichts zu tun (die meisten Programme / Umgebungen verwenden dabei heutzutage UTF-8)
-Michael
-
- Beiträge: 140
- Registriert: Fr 21. Nov 2008, 11:29
- OS, Lazarus, FPC: Winux (L 1.0.6.xy FPC 2.6.z)
- CPU-Target: 32/64Bit
Re: validfilename
Vielen Dank für die vielen propmpten Anregungen !!!
Mein Resumee aus allen ist:
1.validfilename muss wohl Dateisystemspezifisch codiert werden :
(mittels compilerschalter oder individualisierter methoden)
2.Meine "standard" Version für Windows is unten zu sehen. In die methode habe ich sicherheitshalber alle "forbidden Chars" eingefügt,
da ich keine exotischen Namen brauche in meinen Anwendungen (mehr zu den forbidden Chars : siehe auch Hinweis Creed Steiger)
Mein Resumee aus allen ist:
1.validfilename muss wohl Dateisystemspezifisch codiert werden :
(mittels compilerschalter oder individualisierter methoden)
2.Meine "standard" Version für Windows is unten zu sehen. In die methode habe ich sicherheitshalber alle "forbidden Chars" eingefügt,
da ich keine exotischen Namen brauche in meinen Anwendungen (mehr zu den forbidden Chars : siehe auch Hinweis Creed Steiger)
Code: Alles auswählen
function Tfoinifiledit.validfilename(filenamewithpath: string): boolean;
var filename : string;
// ......................................
function checkfor(reserved : array of string) : boolean;
var a : integer;
begin result := true;
for a := 0 to high(reserved) do
begin If pos(reserved[a],filename)>0
then exit;
end;
result := false;
end;
// :::::::::::::::::::::::::::::::::::::
const ForbiddenChars : set of Char = [';', '=', '+', '<', '>', '|','[', ']','\', '/,':','?','!',,'"',''''];
var i : integer;
begin result := false;
If trim(filenamewithpath)=''
then exit;
If not DirectoryExists(extractfiledir(filenamewithpath))
then exit; // alternative could be : create a new directory
filename := Uppercase(sysutils.ExtractFileName(filenamewithpath));
For i := 0 to length(filename) do
begin If filename[i] in forbiddenchars
then exit;
end;
If checkfor(['CON','PRN','AUX','NUL',
'COM1','COM2','COM3','COM4','COM5','COM6','COM7','COM8','COM9',
'LPT1','LPT2','LPT3','LPT4','LPT5','LPT6','LPT7','LPT8','LPT9'])
then exit;
result := true;
end;