Elencare i dischi di sistema


#1

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.


#2

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


#3

On 6/15/07, Fabio P. 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:\”]


#4

On 6/15/07, Daniele A. 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:”]


#5

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