delphi目录存在网络映射单元的函数奇数行为

dmd*_*ini 5 delphi directory function exists delphi-xe

在delphi XE中,当我使用以下输入调用SysUtils DirectoryExists函数时

'Y:\布拉布拉\'

其中Y是网络映射单元,它正确返回false,因为blabla不存在.

但是当我用以下输入调用时

'Y:\布拉布拉\ Y:\ BLA'

它返回true.

文档很差,我没有在具有相同问题的互联网上找到任何人

也许有人在这里已经遇到过这个问题,或者知道发生了什么事?

RRU*_*RUZ 6

这似乎是DirectoryExists函数实现中的一个错误.

这是此功能的相关代码

function DirectoryExists(const Directory: string; FollowLink: Boolean = True): Boolean;
{$IFDEF MSWINDOWS}
var
  Code: Cardinal;
  Handle: THandle;
  LastError: Cardinal;
begin
  Result := False;
  Code := GetFileAttributes(PChar(Directory));

  if Code <> INVALID_FILE_ATTRIBUTES then
  begin
    ...
    //more code
    ...
  end
  else
  begin
    LastError := GetLastError;
    Result := (LastError <> ERROR_FILE_NOT_FOUND) and
      (LastError <> ERROR_PATH_NOT_FOUND) and
      (LastError <> ERROR_INVALID_NAME) and
      (LastError <> ERROR_BAD_NETPATH);
  end;
end;
{$ENDIF MSWINDOWS}
Run Code Online (Sandbox Code Playgroud)

当您看到GetFileAttributes函数调用失败时,会将GetLastError方法的结果与一组可能的值进行比较.但在你的情况下,传递一个无效的路径将返回一个ERROR_BAD_PATHNAME(161)代码,所以该函数返回True.