Определить тип привода
Понадобилось мне тут нарисовать лиспик, который позволяет абсолютно однозначно определить, к какому диску сейчас выполняется обращение - к локальному, сетевому или съемному. Помню, что как-то на VBA в свое время я подобное решал. Но как - подробности давным-давно похоронены.
Ни "чистом" AutoLISP, ни в "нечистом" VisualLISP подобное я не обнаружил (справедливости ради надо заметить, что не особо и искал). Решил все сделать через длинный-длинный путь - обратиться к FileSystemObject:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | (defun _lispru-ws-get-drive-type (drive / svr res) ;| * Получение типа привода. * Параметры вызова: drive - имя привода, для которого надо получить тип * Возвращает: -1 ошибка (привод не существует или к нему нет доступа) 1 съемный диск (дисковод или Flash-накопитель) 2 локальный (жесткий) диск 3 подключенный сетевой диск указан адрес типа "\\\\server\\drive$" 4 CD / DVD-ROM |; (setq svr (vlax-get-or-create-object "Scripting.FileSystemObject")) (if (vl-catch-all-error-p (vl-catch-all-apply (function (lambda () (setq res (vlax-get-property (vlax-invoke-method svr 'getdrive drive) 'drivetype)) ) ;_ end of lambda ) ;_ end of function ) ;_ end of vl-catch-all-apply ) ;_ end of vl-catch-all-error-p (setq res -1) ) ;_ end of if (vlax-release-object svr) (setq svr nil) res ) ;_ end of defun |
Ничего особо сложного нет
P.S. В качестве памятки, свойства и методы, поддерживаемые FileSystemObject:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | (vlax-dump-Object svr t) ; IFileSystem3: FileSystemObject ; Property values: ; Drives (RO) = #<VLA-OBJECT IDriveCollection 00ee7160> ; Methods supported: ; BuildPath (2) ; CopyFile (3) ; CopyFolder (3) ; CreateFolder (1) ; CreateTextFile (3) ; DeleteFile (2) ; DeleteFolder (2) ; DriveExists (1) ; FileExists (1) ; FolderExists (1) ; GetAbsolutePathName (1) ; GetBaseName (1) ; GetDrive (1) ; GetDriveName (1) ; GetExtensionName (1) ; GetFile (1) ; GetFileName (1) ; GetFileVersion (1) ; GetFolder (1) ; GetParentFolderName (1) ; GetSpecialFolder (1) ; GetStandardStream (2) ; GetTempName () ; MoveFile (2) ; MoveFolder (2) ; OpenTextFile (4) |
Подробности можно найти в MSDN (правда, скорее всего, на английском языке).
P.P.S. Постепенно зреет ощущение, что надо снова разыскивать VisualStudio 6.0 и ставить оттуда MSDN - уж больно там все просто расписано