Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
2-1234501240
dark_volk
2009-02-13 08:00
2009.04.05
Копирование таблиц


15-1233933854
Stan
2009-02-06 18:24
2009.04.05
String[xx] в Delphi 2009


15-1233483473
killaTank
2009-02-01 13:17
2009.04.05
Авторские права


15-1233510452
AgSmit
2009-02-01 20:47
2009.04.05
2 соединения PPPoE на Win Server 2003


15-1233422138
blackman
2009-01-31 20:15
2009.04.05
Отстал от жизни.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский