我不想通过
try
  ...
except
  showmessage('is not valid');
end;有没有其他方法或函数。

解决方案 »

  1.   

    if FileExists('c:\a.txt') then ShowMessage('存在')
    else ShowMessage('不存在');
      

  2.   

    好歹我也5个三角形,我至于不知道 FileExists吗???
    我不是判断文件存在与否,而是文件名称的有效性!
    例如:a*b.txt是无效文件名,我试过查找是否含有\/:*?"<>|字符,但是有的乱码一样的字符虽然不含有上述字符,但仍然是非法不能作为文件名。
      

  3.   

    我给你写一个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;
      

  4.   

    上面只是验证文件名,不验证路径。。路径验证直接使用FileExists就可以了。。FileExists可以验证文件是否存在,也可以验证路径是否存在。。
      

  5.   

    我的函数应该是正解,虽然乱码有可能无法保存,那是因为乱码中包含/\<>|:?*"这些字符才无法保存的,你可以保存一个乱码文件名看看,windows是会报告你的文件名中不能包含的字符的列表的。。
      

  6.   

    result := FileExists(AName);
    if not result then
    begin
      result := CloseHandle(FileCreate(AName));
      if result then DeleteFile(AName);
    end;
      

  7.   

    麻煩,有點小體大做了吧?XP系統不是已經自動判斷的了?何況,你先要從路徑裡面提取文件名,再判斷是否是正確的文件名字?
    請判斷:
    D:\123\456\789\6.opq
    裡面的789\6.opq是非法的文件名,你怎麼知道789\是不是路徑?
      

  8.   

    只有文件名称,没有路径的,而且我就遇到乱码的字符而且不含有\/:*?"<>|中任何一个,但也不能作为文件名的.只可惜我把它给删除了,否则一定贴上来让大家瞧瞧
      

  9.   

    对于这样的问题,我认为最根本最彻底的办法就是象 hthunter(核桃...) 说的那样:用你的文件名在临时文件夹里尝试创建一个空文件,可以创建就表示是合法的-------------
    原因很简单:除了非法字符,还有一些特殊的文件名不能使用,
    比如 com1,com2...LTP1,LPT2...(天知道M$保留了哪些...)
    几乎没办法枚举判断。