| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Как поставить машинный адрес в соответствие букве? |
| Автор: EnyKey 14.10.2006, 23:41 |
| Программа получает адрес в виде \Device\HarddiskVolume3\... Для дальнейшего обращения к файлу нужно преобразовать данное представление в, например, E:\... Как такое сделать? |
| Автор: anwe 15.10.2006, 00:36 |
| Откуда получается адрес без имени диска? Если тебе нужен полный адрес к файлу то используй функцию GetCurrentDir. |
| Автор: EnyKey 15.10.2006, 00:47 |
| Получаем от NtQueryObject... Вместо имени диска идёт машинное представление MountedDevice. Надо полчучить имя диска |
| Автор: bems 15.10.2006, 03:49 | ||||
Эта штука выводит
Перебираешь все буквы и сравниваешь со своим девайсом |
| Автор: BUGOR 15.10.2006, 07:56 |
| Ну вообще эта информация хранится здесь: HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices, а ещё есть функция DefineDosDevice, она вроде обратна функции QueryDosDevice, иль я ошибаюсь) |
| Автор: S0vNarK0m 15.10.2006, 14:24 |
| BUGOR, Ошибаешься, DefineDosDevice позволяет смонтировать диск... или отключить. |
| Автор: BUGOR 15.10.2006, 14:29 |
| S0vNarK0m, вот, единственный раз пренебрёг описанием и решил положиться на свою логику и ошибься, бывает... спасибо за поправку |
| Автор: EnyKey 15.10.2006, 14:34 |
| bems, а без перебора способа нету? |
| Автор: bems 16.10.2006, 01:47 |
Мне такие не известны, но не думаю чтобы они были. Дело в том, что c: это символическая ссылка на Device\HarddiskVolume1 и их может быть больше одной. Как зная (к примеру) адрес ячейки памяти найти конкретный из всего множества указатель на нее? Это метафора, но я надеюсь мысль ясна - с помощью DefineDosDevice можно хоть десяток "дисков"-двойников наделать, хватило бы букв. Поэтому если способы, о которых ты говоришь и существуют, то внутренне это будет перебор. Если и после этого способ не подходит - вся проблема в реализации и нужно учиться писать |
| Автор: dumb 16.10.2006, 02:05 |
если microsoft http://msdn.microsoft.com/library/default.asp?url=/library/en-us/memory/base/obtaining_a_file_name_from_a_file_handle.asp, то, видимо, и тебе придется. |
| Автор: EnyKey 16.10.2006, 21:53 |
| bems, нет, спасибо, просто думал, вдруг варианты есть)) |
| Автор: bems 17.10.2006, 02:22 |
| EnyKey, почитай еще хелп по QueryDosDevice, она может возвращать не строку, а массив строк. Пример савсем упращенный |