При разработке утилит, которые работают с файлами, важно уметь различать, находятся ли они на локальном компьютере или на удалённом. В Delphi для этого можно использовать функцию GetDriveType, которая определяет тип диска, указанного в пути. Рассмотрим, как это можно реализовать.
Определение типа диска
Для начала, давайте разберёмся с тем, какие типы дисков нам доступны. Функция GetDriveType возвращает один из следующих типов:
DRIVE_UNKNOWN: Тип диска неизвестен.
DRIVE_NO_ROOT_DIR: Диск без каталога корня (например, сеть без указания папки).
DRIVE_REMOVABLE: Съёмный диск (например, флешка).
DRIVE_FIXED: Постоянный диск (например, жёсткий диск).
DRIVE_REMOTE: Сетевой диск.
DRIVE_CDROM: CD-ROM диск.
Пример кода
Ниже приведён пример кода на Object Pascal, который проверяет, является ли указанный путь локальным или сетевым диском:
uses
System.SysUtils;
function IsLocalDrive(const DrivePath: TPath): Boolean;
var
DriveType: Integer;
begin
// Удаляем символы обратного слэша, чтобы получить имя диска.
DrivePath := DrivePath.TrimEnd('\');
Result := (GetDriveType(PChar(DrivePath[DrivePath.Length - 1])) <> DRIVE_REMOTE);
end;
var
SelectedPath: TPath;
begin
SelectedPath := 'C:\'; // Пример пути, который нужно проверить.
if IsLocalDrive(SelectedPath) then
ShowMessage('Путь указывает на локальный диск.')
else
ShowMessage('Путь указывает на сетевой диск.');
end;
Альтернативный способ
Также можно использовать функцию ExpandUNCFileName, которая возвращает путь в формате UNC, если путь указывает на сетевой диск. Если результат начинается с двух обратных слэшей (\\), это означает, что диск сетевой.
uses
System.SysUtils;
function IsNetworkPath(const DrivePath: TPath): Boolean;
begin
Result := Pos('\\', ExpandUNCFileName(DrivePath)) = 1;
end;
var
SelectedPath: TPath;
begin
SelectedPath := 'Z:\'; // Пример пути, который нужно проверить.
if IsNetworkPath(SelectedPath) then
ShowMessage('Путь указывает на сетевой диск.')
else
ShowMessage('Путь не является сетевым диском (локальный или субституированный).');
end;
Важные замечания
Функция GetDriveType возвращает DRIVE_REMOTE для сетевых дисков, но также может возвращать этот же результат для локальных дисков, если они были субституированы с помощью команды SUBST.
Функция ExpandUNCFileName возвращает путь в формате UNC для сетевых дисков, но также может вернуть путь с двумя слэшами для субституированных локальных дисков.
Используя эти методы, вы сможете определить, является ли выбранная папка локальной или сетевой, что может быть полезно для вашей утилиты, требующей ввода папки на удалённом компьютере.
В данном тексте рассматриваются способы отличия локальных и сетевых папок в среде разработки Delphi, используя функции `GetDriveType` и `ExpandUNCFileName`.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.