我在用FileExists判断本地一个中文文件名时总是返回false,问题出在什么地方。
源码如下,新建的一个测试工程,只有一个buttn
  var str: string;
  str:= ExtractFilePath(Application.ExeName) + '最近设计模板.dat';
  if FileExists(str) then
  ShowMessage('ddd');

解决方案 »

  1.   

    检查一下ExtractFilePath(Application.ExeName) 后有没有‘\'。
    你可以自己判断一下,没有'\'则加上。
    还不行就可能确实没有那个文件了,你把str显示出来看看
      

  2.   

    即使文件存在也得False,就是缺那个"\"
      

  3.   

    我学才把你的代码调试过了,没出什么异常:
    var
      str: string;
    begin
      str:= ExtractFilePath(Application.ExeName) + '最近设计模板.dat';
      if FileExists(str) then
        ShowMessage(str)
      else
        ShowMessage('Not Exists');
    end;
      

  4.   

    我再次把这个生成的exe文件copy到win98、win2000、winXp的虚拟系统上进行调试。
    一切运行正常。
      

  5.   

    var str: string;
      str:= ExtractFilePath(Application.ExeName) + '最近设计模板.dat';
            //上面的函数返回的路径是带'/'的
      showMessage(str);  //看看路径是不是你要的再说
      if FileExists(str) then
      ShowMessage('ddd');
      

  6.   

    不会把 
    var str: string;
    begin
      str:= ExtractFilePath(Application.ExeName) + '最近设计模板.dat';
      //其中str的值如下
      str:= 'C:\Documents and Settings\Administrator\My Documents\最近设计模板.dat';
      if FileExists(str) then ShowMessage('ddd');
    end;
    文件最近设计模板.dat肯定存在的但是没有显示ShowMessage
    郁闷ing
      

  7.   

    你这个方法是否在类里面,而且该类有一个名为FileExists的子方法? 把上面的
    if FileExists(str) then ShowMessage('ddd');
    改成
    if SysUtils.FileExists(str) then ShowMessage('ddd');
    如果不行,确定你的"最近设计模板.dat"没被其它程序独占打开.这是FileExists的源码:function FileAge(const FileName: string): Integer;
    var
      Handle: THandle;
      FindData: TWin32FindData;
      LocalFileTime: TFileTime;
    begin
      Handle := FindFirstFile(PChar(FileName), FindData);
      if Handle <> INVALID_HANDLE_VALUE then
      begin
        Windows.FindClose(Handle);
        if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then
        begin
          FileTimeToLocalFileTime(FindData.ftLastWriteTime, LocalFileTime);
          if FileTimeToDosDateTime(LocalFileTime, LongRec(Result).Hi,
            LongRec(Result).Lo) then Exit;
        end;
      end;
      Result := -1;
    end;function FileExists(const FileName: string): Boolean;
    begin
      Result := FileAge(FileName) <> -1;
    end;其实你可以自己改改的,自己做个FileExists更好,不用Delphi判断时间的这个,给人感觉效率不高.
      

  8.   

    其实,FileAge函数有个很明显的bug,那就是,如果执行到
    if FileTimeToDosDateTime(LocalFileTime, LongRec(Result).Hi,
            LongRec(Result).Lo) then Exit;
    的话,函数体结束,但Result未初始化!可以是任意值~!
      

  9.   

    你的代码没错,
    ExtractFilePath(Application.ExeName)本身就是带“\”的,
    肯定是你的输入的文件路径不对。
    要不你设置资源管理器“显示完全路径”(文件选项中),然后从路径栏拷贝路径到你PAS文件中试试看。要不你做下测试:
    var str: string;
    begin
      str:= ExtractFilePath(Application.ExeName) + '最近设计模板.dat';
      ShowMesage(str);
      if FileExists(str) then ShowMessage('ddd');
    end;
      

  10.   

    你的应用程序没放在
    C:\Documents and Settings\Administrator\My Documents\
    目录下吧。
      

  11.   

    要不将“C:\Documents and Settings\Administrator\My Documents\”
    改为
    “C:\Docume~1\Administrator\MyDocu~1\”试一下
      

  12.   

    先把路径SHOW出来看下对不对啊.
      

  13.   

    这根我应用程序放在那个目录没关系,我用的是绝对路径也不行,你们做的都可以?我的开发环境是win2000 server delphi 6 delphi 7我都是过了不行。代码十分简单,新建的工程,就一个判断一个showmessage。TForm类中也没有FileExists方法。郁闷呀
      

  14.   

    首先你要判断,ExtractFilePath(Application.ExeName)
    最后一个字是否是"/"如果是则不用加,如果不是则要要加上
      

  15.   

    ExtractFilePath(Application.ExeName)是带'\'的
      

  16.   

    倒 怎么解决这个问题呀,我是过了好多函数,英文名称的文件名都可以,中文文件名就不行。help help
      

  17.   

    var str: string;
    begin
      str:= ExtractFilePath(Application.ExeName) + '最近设计模板.dat';
      ShowMesage(str);//看看这里正确吗?
      if FileExists(str) then ShowMessage('ddd');
    end;你先Message出来看看正确吗?在根据问题分析。
      

  18.   

    'D:\Documents and Settings\Administrator\My Documents\新建文件夹\最近设计模板.dcu' 文件名路径都是对的,主要是我必须用中文名,设计有点问题不想改,改动太大
      

  19.   

    中文能有什么问题?
    if FileExists('C:\Documents and Settings\Administrator\My Documents\新建文件夹\没有丑陋的女人只有贫穷的女人.JPG') then
        Showmessage('1');我试了的,都没错啊。你换台机器试试看
      

  20.   

    很是对不起大家,小弟我那天喝多了,其实太简单了,我的文件名用了.dat.dat两个扩展名。很是抱歉,可惜能给的人数太少,就一百,如果给分数少了,联系我qq8528630,msn:[email protected],msn比较常用。很是抱歉,哎............