Главная страница
    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.5 MB
Время: 0.078 c
2-1234347557
SingleStranger
2009-02-11 13:19
2009.04.05
Динамический массив структур (record) как свойство класса.


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


2-1234787510
abhtr
2009-02-16 15:31
2009.04.05
Смена кодировки Win -> DOS для string


15-1233847881
Илья_
2009-02-05 18:31
2009.04.05
Красивые рисунки с эффектом стеклянной поверхности


2-1234774833
Igorntk
2009-02-16 12:00
2009.04.05
Как перенести запись из TEdit в Combobox?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский