在delphi XE中,当我使用以下输入调用SysUtils DirectoryExists函数时
'Y:\blabla\'
其中 Y 是网络映射单元,它正确返回 false,因为 blabla 不存在。
但是当我使用以下输入调用时
'Y:\blabla\Y:\bla'
它返回 true。
文档很差,我在互联网上没有找到遇到同样问题的人
也许这里有人已经遇到了这个问题,或者知道发生了什么?
最佳答案
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}
如您所见,如果 GetFileAttributes
函数调用失败,结果为GetLastError
方法与一组可能的值进行比较。但在您的情况下,传递无效路径将返回 ERROR_BAD_PATHNAME
(161) 代码,因此该函数返回 True。
关于delphi目录存在网络映射单元的函数奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15166420/