Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.04.05;
Скачать: CL | DM;

Вниз

Перечень дисков   Найти похожие ветки 

 
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 вся ветка

Текущий архив: 2009.04.05;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.021 c
15-1233597751
stas
2009-02-02 21:02
2009.04.05
Работа с GIF


2-1234350097
workbench
2009-02-11 14:01
2009.04.05
перемещение TreeNode


2-1235058508
AlexeyMir
2009-02-19 18:48
2009.04.05
Как ОТОБРАЗИТЬ Lookup-поле в DBGrid`e


2-1234697378
cer
2009-02-15 14:29
2009.04.05
Передача данных в шаблон Эксель


15-1234120264
istok2
2009-02-08 22:11
2009.04.05
как создать достать базу вебсайтов интернета...