Форум: "WinAPI";
Текущий архив: 2009.04.05;
Скачать: [xml.tar.bz2];
ВнизПеречень дисков Найти похожие ветки
← →
TCrash (2008-04-08 20:36) [0]Требуется вывести в список только съемные диски. Проверка типа диска нашел - GetDriveType, но не хочется ведь делать
for i:=byte("A") to byte("Z") do ........
как можно получить список дисков компьютера, возможно в какой-то структуре?
← →
Тыщ (2008-04-08 20:39) [1]Во всех программах видел только GetDriveType.
26 букв перебрать - это не так уж и много.
← →
trubin © (2008-04-08 21:30) [2]
> как можно получить список дисков компьютера, возможно в
> какой-то структуре?
GetLogicalDriveStrings
← →
Тыщ (2008-04-08 21:37) [3]trubin © (08.04.08 21:30) [2]
>GetLogicalDriveStrings
Парсить строку с буквами, чтоб все равно перечислять в цикле?!
Тогда уж лучше GetLogicalDrives.
← →
trubin © (2008-04-08 21:58) [4]
> Парсить строку с буквами, чтоб все равно перечислять в цикле?
> !
> Тогда уж лучше GetLogicalDrives.
Ему все равно надо диски в список выводить, вот буковки и потребуются.
Впрочем из GetLogicalDrives буковки получить тоже не проблема.
← →
trubin © (2008-04-08 22:02) [5]Кроме того зачем лишний цикл. Диски из строки возвращаемой GetLogicalDriveStrings всеравно в цикле получаешь. Получил диск - проверил, всего и делов ... .
← →
Тыщ (2008-04-08 22:09) [6]trubin © (08.04.08 22:02) [5]
А я говорю, GetLogicalDrives круче :)uses Windows;
{$APPTYPE CONSOLE}
var
Drives:cardinal;
I:integer;
begin
Drives:=GetLogicalDrives();
for I:=0 to 26 do
begin
if Drives shr I and 1<>0 then
Writeln("Drive "+chr(I+ord("a"))+" available");
end;
end.
← →
Anatoly Podgoretsky © (2008-04-09 15:26) [7]> trubin (08.04.2008 21:58:04) [4]
Начиная по крайней мере с ХР диск не обязан иметь букву, а на Висте это получило дальнейшее развитие. Кроме того сильно стали использовать Soft/Hard Links и Junction Point
И еще много наворотов, надо уходить от букв.
← →
clickmaker © (2008-04-09 15:28) [8]
> [7] Anatoly Podgoretsky © (09.04.08 15:26)
а Soft link <> Junction Point ?
← →
Riply © (2008-04-09 15:30) [9]> [7] Anatoly Podgoretsky © (09.04.08 15:26)
> Начиная по крайней мере с ХР диск не обязан иметь букву, а на Висте это получило дальнейшее развитие.
А как это можно симитировать ?
← →
Anatoly Podgoretsky © (2008-04-09 15:40) [10]> clickmaker (09.04.2008 15:28:08) [8]
А черт его знает, они же умудрились в документации так накрутить, что читаешь и чуствуешь себя дураком, потом переходишь в другой раздел и снова себя тем же чувствует, только по другому.
Словарь говорит, что это стык или железнодорожный узел.
Но при разработке надо учитывать, что буквы может не быть и могут быть хитрые ссылки, они у них уже давно есть и используют по разному, например от простого копирования дистрибутива на другой СД, когда на Диске 700 мб может получаться 4 гб.
Я сейчас осваиваю Висту и столкнулся, что многие утилиты работы с оглавлениями и дисками ведут себя странно, не учитывают этого, странности могут быть самие разные. Программисты пока еще не освоили всех этих тонкостей и пишут в стиле Win9x
Буквы из этой же оперы, лучше пересмотреть алгоритм и забыть про них, поскольку это иллюзия. В системе тома идентифицируются с помощью GUID.
Надо бы Рипли затянуть в эту ветку :-)
← →
Anatoly Podgoretsky © (2008-04-09 15:46) [11]> Riply (09.04.2008 15:30:09) [9]
Ага ты уже здесь.
Я не знаю, я пока по старинке работаю, а это надо изучать АПИ.
Но на уровне пользователя в диспетчере дисков, как минимум можно сказать, что бы буква не назначалась. Но там вроде нельзя указать точку монтирования, поскольку диск может быть смонтирован в любое место файловой системы.
А вот жесткие ссылки вроде можно сделать только с консоли, одной из утилит, мне правда они особенно не нужны, но стоит подумать об изучении.
← →
clickmaker © (2008-04-09 15:47) [12]
> Надо бы Рипли затянуть в эту ветку
она уже подтянулась. Как пчела на мед ))
На самом деле
A junction (also called a soft link) differs from a hard link in that the storage objects it references are separate directories, and a junction can link directories located on different local volumes on the same computer
(с) MSDN
← →
Anatoly Podgoretsky © (2008-04-09 15:55) [13]Я там же читал про Hard Link - can link directories located on different local volumes
Я же говорю, что у них много противоречий в ней по данному поводу. А им бы это надо усиленно пропагандировать как среди программистов, так и предоставить нормальные ГУИ инструмент для этого. Консольный вроде есть, но надо потратить время на его поиск и освоение, да и не всем он под силу.
Я как то выходил на него, темный лес, как и в MSDN
← →
Riply © (2008-04-09 16:51) [14]> [10] Anatoly Podgoretsky © (09.04.08 15:40)
> Буквы из этой же оперы, лучше пересмотреть алгоритм и забыть про них,
> поскольку это иллюзия. В системе тома идентифицируются с помощью GUID.
На вкус и цвет..., и кажды сам выбирает что использовать.
Но, из всего многообразия, лично я,
после долгих мучений и обсуждений (была здесь ветка. guav создавал),
остановилась на следующих инструментах для навигации по дискам и работы с ними:
Это IOCTL_MOUNTMGR_QUERY_POINTS.
В структуре _MOUNTMGR_MOUNT_POINT есть полезные поля.
А если сюда еще добавить и SetupApi, то больше вообщем-то и ничего не нужно :)
Разве что можно добавить IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS.
В результате буквы дисков остаются нужны, только для вывода пользователю на экран. :)
P.S.
Rouse_ выладывал пример работы с SetupApi. DeviceList, вроде назывался.
Из него можно "выдернуть" нужное.
В MSDN есть перечисление GUID-ов для необходимых классов устройств.
← →
Riply © (2008-04-09 16:54) [15]> [14] Riply © (09.04.08 16:51)
P.S.
Nt - функции, тоже могут обходиться без букв, причем с большим удовольствием :)
← →
guav © (2008-04-09 18:10) [16]Хардлинк делается так:
fsutil hardlink create <new filename> <existing filename>
хардлинки не имеют отношения к теме т.к. они в пределах тома.
Софтлинки и точки подключения томов это reparse points.
Чтобы у диска не было буквы а была точка подключения папка, можно зайти в Disk Management (diskmgmt.msc) и там Change Drive Letter And Paths...
← →
guav © (2008-04-09 18:15) [17]По теме - FindFirstVolume/FindNextVolume/FindVolumeClose или IOCTL_MOUNTMGR_QUERY_POINTS
← →
Игорь Шевченко © (2008-04-09 22:51) [18]Диск без буквы делается с помощью создания Reparse Point
Но система давно уже внутре с буквами не работает, а работает с томами.
Можно (это для интересующихся) используя WinObj, посмотреть, во что буковки C,D и проч. преобразуются.
Кстати, CreateFileW можно вызывать с именем тома вместо буквы, если хочется получить Handle тома.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2009.04.05;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.006 c