{===================================================
功 能 : 检查文件路径和文件名是否合法
参 数 : Filename : string //文件名
返 回 值 : True : 合法 | False : 不合法
备 注 : 仅检查是否合法,不检测文件是否存在
作 者 : yueue (antong) 2004.8.22
QQ: 20613165 Email: yueue{A}qq.com
=====================================================}
//检查文件名&路径是否合法的函数
function checkFilename(strFilename:string):boolean;
function c(s:string):boolean; //子函数:连带检测
var
i:integer;
s1:string;
f,g,h:boolean;
begin
f:=false;
g:=false;
h:=false;
result:=true;
for i:=0 to length(s)-1 do
begin
s1:=copy(s,i,1);
//检测\的连带
if s1='\' then
begin
if f then
begin
result:=false;
exit;
end
else
begin
f:=true;
result:=true;
end;
var
i:integer;
s1:string;
f,g,h:boolean;
begin
f:=false;
g:=false;
h:=false;
result:=true;
for i:=0 to length(s)-1 do
begin
s1:=copy(s,i,1);
//检测\的连带
if s1='\' then
begin
if f then
begin
result:=false;
exit;
end
else
begin
f:=true;
result:=true;
end;
end
else
begin
f:=false;
result:=true;
end;
//检测:的连带
if s1=':' then
begin
if g then
begin
result:=false;
exit;
end
else
begin
g:=true;
result:=true;
end;
end
else
begin
g:=false;
result:=true;
end;
//检测.的连带
if s1='.' then
begin
if h then
begin
result:=false;
exit;
end
else
begin
h:=true;
result:=true;
end;
end
else
begin
h:=false;
result:=true;
end;
end;
else
begin
f:=false;
result:=true;
end;
//检测:的连带
if s1=':' then
begin
if g then
begin
result:=false;
exit;
end
else
begin
g:=true;
result:=true;
end;
end
else
begin
g:=false;
result:=true;
end;
//检测.的连带
if s1='.' then
begin
if h then
begin
result:=false;
exit;
end
else
begin
h:=true;
result:=true;
end;
end
else
begin
h:=false;
result:=true;
end;
end;
end;
begin
if (extractfilename(strFilename)=strFilename)是否只输入了文件名而没有输路径
or (extractfilename(strFilename)='')//是否只输入了路径没有输文件名
or (extractfileext(extractfilename(strFilename))='')//是否格式错误(比如乱输)
or (extractfileext(extractfilename(strFilename))='.')//是否没有后缀
or (extractfileext(extractfilename(strFilename))=extractfilename(strFilename))
//是否只输入了文件名而没有输路径
or (length(extractfileext(extractfilename(strFilename)))>5)//后缀是否超了5个字节
or (length(extractfilename(strFilename))>225)//文件名是否超过255个字节
or (pos('\',strfilename)=0)//判断是否有'\'
or (pos('.',strfilename)=0)//判断是否有'.'
or (pos(':',strfilename)=0)//判断是否有':'
or (pos('\',extractfilename(strfilename))<>0)//判断文件名是否有非法字符
or (pos('/',extractfilename(strfilename))<>0)
or (pos(':',extractfilename(strfilename))<>0)
or (pos('*',extractfilename(strfilename))<>0)
or (pos('?',extractfilename(strfilename))<>0)
or (pos('"',extractfilename(strfilename))<>0)
or (pos('<',extractfilename(strfilename))<>0)
or (pos('>',extractfilename(strfilename))<>0)
or (pos('|',extractfilename(strfilename))<>0)
or (strfilename='')//是否没有输入任何东西
or (not c(strfilename))//用检测连带函数检测是否出现\.:的连带
then
result:=false else result:=true; //输出
end;
begin
if (extractfilename(strFilename)=strFilename)是否只输入了文件名而没有输路径
or (extractfilename(strFilename)='')//是否只输入了路径没有输文件名
or (extractfileext(extractfilename(strFilename))='')//是否格式错误(比如乱输)
or (extractfileext(extractfilename(strFilename))='.')//是否没有后缀
or (extractfileext(extractfilename(strFilename))=extractfilename(strFilename))
//是否只输入了文件名而没有输路径
or (length(extractfileext(extractfilename(strFilename)))>5)//后缀是否超了5个字节
or (length(extractfilename(strFilename))>225)//文件名是否超过255个字节
or (pos('\',strfilename)=0)//判断是否有'\'
or (pos('.',strfilename)=0)//判断是否有'.'
or (pos(':',strfilename)=0)//判断是否有':'
or (pos('\',extractfilename(strfilename))<>0)//判断文件名是否有非法字符
or (pos('/',extractfilename(strfilename))<>0)
or (pos(':',extractfilename(strfilename))<>0)
or (pos('*',extractfilename(strfilename))<>0)
or (pos('?',extractfilename(strfilename))<>0)
or (pos('"',extractfilename(strfilename))<>0)
or (pos('<',extractfilename(strfilename))<>0)
or (pos('>',extractfilename(strfilename))<>0)
or (pos('|',extractfilename(strfilename))<>0)
or (strfilename='')//是否没有输入任何东西
or (not c(strfilename))//用检测连带函数检测是否出现\.:的连带
then
result:=false else result:=true; //输出
end;