我给你写一个function isValidFileName(Afile:String):boolean; var i:integer; begin Result:=false; if Afile<>'' then begin Result:=true; for i:=1 to length(Afile) do if (Afile[i] in ['/','\','<','>','|',':','?','*','"']) then begin Result:=false; break; end; end; end;
else ShowMessage('不存在');
我不是判断文件存在与否,而是文件名称的有效性!
例如:a*b.txt是无效文件名,我试过查找是否含有\/:*?"<>|字符,但是有的乱码一样的字符虽然不含有上述字符,但仍然是非法不能作为文件名。
var
i:integer;
begin
Result:=false;
if Afile<>'' then
begin
Result:=true;
for i:=1 to length(Afile) do
if (Afile[i] in ['/','\','<','>','|',':','?','*','"']) then
begin
Result:=false;
break;
end;
end;
end;
if not result then
begin
result := CloseHandle(FileCreate(AName));
if result then DeleteFile(AName);
end;
請判斷:
D:\123\456\789\6.opq
裡面的789\6.opq是非法的文件名,你怎麼知道789\是不是路徑?
原因很简单:除了非法字符,还有一些特殊的文件名不能使用,
比如 com1,com2...LTP1,LPT2...(天知道M$保留了哪些...)
几乎没办法枚举判断。