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

Проверка существования директории в Delphi XE2 без вызова ошибок

Delphi , Интернет и Сети , Браузер

При разработке программ на Delphi, особенно в версии XE2, иногда возникают проблемы, связанные с проверкой существования директорий. Одной из таких проблем является неправильное определение существования директории на пустых CD/DVD приводах. В данной статье мы рассмотрим, как корректно проверить существование директории в Delphi XE2, избегая возникновения ошибок и диалогов с пользователем.

Первичный метод проверки

Исходный код функции, предоставленный пользователем, приводит к ошибке переполнения (Range Check Error):

function DirExists(Name: string): Boolean;
var
  Code: Integer;
begin
  Code := GetFileAttributesW(PChar(Name));
  Result := (Code <> -1) and (FILE_ATTRIBUTE_DIRECTORY and Code <> 0);
end;

Эта ошибка возникает из-за смешения типов данных и некорректного использования директив компилятора.

Исправленный метод проверки

Для решения проблемы можно использовать следующий подход:

function DirExists(Name: string): Boolean;
var
  Code: DWORD;
begin
  Code := GetFileAttributes(PChar(Name));
  Result := (Code <> INVALID_FILE_ATTRIBUTES) and
    (FILE_ATTRIBUTE_DIRECTORY and Code <> 0);
end;

Здесь использован тип DWORD, что позволяет избежать ошибок переполнения. Однако, даже с таким подходом, директории на пустых CD/DVD приводах могут быть неправильно идентифицированы как существующие.

Альтернативный ответ из контекста

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

function DirectoryExistsDelphiXE2(const Directory: string; FollowLink: Boolean = True): Boolean;
var
  Code: Cardinal;
  Handle: THandle;
  LastError: Cardinal;
begin
  Result := False;
  Code := GetFileAttributes(PChar(Directory));
  // ... (остальная часть кода)
end;

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

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

Для того чтобы избежать системных ошибок, таких как "Drive is not ready", рекомендуется на старте процесса вызвать функцию:

procedure SetProcessErrorMode;
var
  Mode: DWORD;
begin
  Mode := SetErrorMode(SEM_FAILCRITICALERRORS);
  SetErrorMode(Mode or SEM_FAILCRITICALERRORS);
end;

Этот подход позволяет подавить системные диалоги об ошибках, но не решает проблему неправильной идентификации директорий на пустых приводах в Delphi XE2.

Заключение

Для корректной проверки существования директории в Delphi XE2 без вызова системных ошибок, рекомендуется использовать исправленный метод с типом DWORD и, при необходимости, подавить диалоги об ошибках с помощью функции SetProcessErrorMode. В случае использования более новых версий Delphi, следует обновиться до XE3 или выше, где проблема уже решена на уровне стандартных функций.

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

В статье рассматривается проблема проверки существования директорий в Delphi XE2 с целью избежания ошибок, особенно при работе с пустыми CD/DVD приводами.


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

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




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


:: Главная :: Браузер ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-02-20 22:53:33/0.0020489692687988/0