Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Ошибки и Исключения: Тестирование `DirectoryExists` с Сетевыми Путями в Delphi XE

Delphi , Файловая система , Директории

Ошибки и Исключения: Тестирование DirectoryExists с Сетевыми Путями в Delphi XE

В статье рассматривается проблема, связанная с функцией DirectoryExists из модуля SysUtils в среде разработки Delphi XE при работе с сетевыми путями. Эта проблема проявляется в неожиданном поведении функции при определении существования каталогов, особенно когда используются сетевые маппинги.

Описание проблемы

При вызове функции DirectoryExists с указанием сетевого пути в формате Y:\blabla\, где Y - это сетевой маппинг, функция корректно возвращает false, если указанный каталог не существует. Однако, если в качестве аргумента передать путь в формате Y:\blabla\Y:\bla, функция возвращает true. Это нелогичное поведение, которое не описано в документации и не обсуждалось в сообществах разработчиков.

Подтвержденный ответ

Исходя из предоставленных данных, проблема заключается в ошибке реализации функции DirectoryExists. Примерный код функции показывает, что при неудачном вызове GetFileAttributes функция проверяет возвращаемое значение GetLastError на соответствие определенному набору кодов ошибок. В случае с некорректным путем функция возвращает код ошибки ERROR_BAD_PATHNAME (161), что приводит к возвращению true вместо ожидаемого false.

Альтернативный ответ и решения

В более новых версиях Delphi, таких как XE3, проблема была исправлена. Однако, на момент обсуждения, ошибка присутствовала и в последующих версиях, включая XE8. Предлагается обернуть вызов функции DirectoryExists в дополнительную логику, которая будет исключать возможность возврата true в случае, если GetFileAttributes возвращает INVALID_FILE_ATTRIBUTES. Пример такой функции:

DirectoryUsable(const Directory: string; FollowLink: Boolean = True): Boolean;
begin
   Result := GetFileAttributes(PChar(Directory)) <> INVALID_FILE_ATTRIBUTES;
   if Result then Result := DirectoryExists( Directory, FollowLink );
end;

Также можно использовать функцию PathIsDirectory для предварительной проверки пути. Важно отметить, что при работе с пользовательским вводом необходимо тщательно валидировать данные, чтобы предотвратить передачу некорректных путей.

Заключение

При работе с сетевыми путями в Delphi XE и последующих версиях, следует быть внимательным к поведению функции DirectoryExists, особенно при передаче сложных или неоднозначных путей. Рекомендуется использовать дополнительные проверки и, при необходимости, обертывать вызовы этой функции в дополнительную логику для корректного определения существования каталогов.

Создано по материалам из источника по ссылке.

Обсуждается проблема с функцией `DirectoryExists` в Delphi XE при работе с сетевыми путями, связанная с ошибочным возвратом `true` при наличии в пути дублируемой части сетевого маппинга.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Директории ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 21:03:04/0.0050101280212402/1