# Elencare i dischi di sistema

**URL:** <https://www.ruby-forum.com/t/elencare-i-dischi-di-sistema/106937>\
**Category:** IT\
**Created:** [June 15, 2007, 2:32pm UTC](https://www.ruby-forum.com/t/elencare-i-dischi-di-sistema/106937 "2007-06-15T14:32:49Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![biospank](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/f475e1/32.png) [@biospank](https://www.ruby-forum.com/u/biospank)\
**Post date:** [June 15, 2007, 2:32pm UTC](https://www.ruby-forum.com/t/elencare-i-dischi-di-sistema/106937/1 "2007-06-15T14:32:49Z")

</div>

Ciao a tutti,  
sono fabio e questo è il mio primo post…  
La mia domanda potrebbe essere scontata per molti ma non per me…:

Come faccio in ruby ad elencare gli hard disk del mio pc (windoz)?

es. a:, b:, c:\ …

grazie.

---

<div class="post-metadata">

**Author:** ![biospank](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/f475e1/32.png) [@biospank](https://www.ruby-forum.com/u/biospank)\
**Post date:** [June 15, 2007, 2:49pm UTC](https://www.ruby-forum.com/t/elencare-i-dischi-di-sistema/106937/2 "2007-06-15T14:49:53Z")

</div>

Non l’ho mai provato ma dai un okkio al modulo Windows::Volume del gem  
windows-pr

(gem install windows-pr e poi ti guardi l’rdoc)

forse il metodo GetLogicalDrives fa al caso tuo…  
Paolo

---

<div class="post-metadata">

**Author:** ![biospank](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/f475e1/32.png) [@biospank](https://www.ruby-forum.com/u/biospank)\
**Post date:** [June 15, 2007, 4:54pm UTC](https://www.ruby-forum.com/t/elencare-i-dischi-di-sistema/106937/3 "2007-06-15T16:54:12Z")

</div>

On 6/15/07, Fabio P. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Come faccio in ruby ad elencare gli hard disk del mio pc (windoz)?  
> es. a:, b:, c:\ …

Ciao Fabio, come ti ha giÃ risposto Paolo esiste la gemma windows-pr  
perÃ² attenzione perchÃ© spesso non Ã¨ propriamente immediata da  
utilizzare se non hai particolari conoscenze del funzionamento delle  
API Win32, del resto spesso questa gemma si limita a esporre le API in  
maniera piuttosto grezza per essere poi usata principalmente come base  
per le gemme appartenenti alle win32-utils.

Comunque ecco come dovresti fare per ottenere la lista delle unitÃ con  
le API via windows-pr (btw, il metodo piÃ¹ consono Ã¨  
GetLogicalDriveStrings visto che GetLogicalDrives restituisce una  
bitmask rappresentante le unitÃ disponibili):

require ‘windows/volume’  
include Windows::Volume

def get\_drive\_letters  
buffer = " " \* 1024  
length = GetLogicalDriveStrings(buffer.length, buffer)  
buffer[0…length].split(0.chr)  
end

p get\_drive\_letters

# =\> [“A:\”, “C:\”, “D:\”, “E:\”, “Z:\”]

Altrimenti, senza windows-pr e in maniera un po’ meno astrusa, puoi  
usare win32ole per instanziare un oggetto FileSystemObject e ottenere  
l’elenco delle unitÃ :

require ‘win32ole’

def get\_drive\_letters  
drives = []  
fso = WIN32OLE.new(‘Scripting.FileSystemObject’)  
fso.drives.each { |drive| drives \<\< drive.driveletter + “:\” }  
drives  
end

p get\_drive\_letters

# =\> [“A:\”, “C:\”, “D:\”, “E:\”, “Z:\”]

---

<div class="post-metadata">

**Author:** ![biospank](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/f475e1/32.png) [@biospank](https://www.ruby-forum.com/u/biospank)\
**Post date:** [June 15, 2007, 5:35pm UTC](https://www.ruby-forum.com/t/elencare-i-dischi-di-sistema/106937/4 "2007-06-15T17:35:24Z")

</div>

On 6/15/07, Daniele A. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

Dimenticavo, sempre con win32ole puoi anche interfacciarti con WMI per  
effettuare delle query al sistema. Il vantaggio Ã¨ che WMI ti offre  
maggiore flessibilitÃ restituendo anche piÃ¹ informazioni ma con poche  
istruzioni e in maniera abbastanza intuitiva. Faccio un esempio che  
restituisce le lettere delle unitÃ di tipo “disco locale”:

require ‘win32ole’

def get\_drive\_letters  
drives = []  
wmi = WIN32OLE.connect(“winmgmts://”)  
devices = wmi.ExecQuery(“SELECT \* FROM Win32\_LogicalDisk WHERE  
DriveType = 3”)  
devices.each { |drive| drives \<\< drive.DeviceId }  
drives  
end

p get\_drive\_letters

# =\> [“C:”]

---

<div class="post-metadata">

**Author:** ![biospank](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/f475e1/32.png) [@biospank](https://www.ruby-forum.com/u/biospank)\
**Post date:** [June 24, 2007, 4:33pm UTC](https://www.ruby-forum.com/t/elencare-i-dischi-di-sistema/106937/5 "2007-06-24T16:33:02Z")

</div>

Fabio P. wrote:

> Ciao a tutti,  
> sono fabio e questo è ©l mio primo post…  
> La mia domanda potrebbe essere scontata per molti ma non per me…:
> 
> Come faccio in ruby ad elencare gli hard disk del mio pc (windoz)?
> 
> es. a:, b:, c:\ …
> 
> grazie.

ma sei fabio petrucci nato l’8/12/75?  
se sÃ¬ scrivimi a removed\_email\_address@domain.invalid
