Forum: Italian Ruby user group elencare i dischi di sistema

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
89f9acdcbc663e41e45ce590cd746d6e?d=identicon&s=25 Fabio Petrucci (Guest)
on 2007-06-15 14:32
(Received via mailing list)
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.
B1c45f949749d001b4b9a75f50f69d38?d=identicon&s=25 Paolo Dona (paolodona)
on 2007-06-15 14:49
(Received via mailing list)
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
1c29f9b1bf5f1b88ed8b0c9a9be39788?d=identicon&s=25 Daniele Alessandri (Guest)
on 2007-06-15 16:54
(Received via mailing list)
On 6/15/07, Fabio Petrucci <fabio.petrucci@gmail.com> 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:\\"]
1c29f9b1bf5f1b88ed8b0c9a9be39788?d=identicon&s=25 Daniele Alessandri (Guest)
on 2007-06-15 17:35
(Received via mailing list)
On 6/15/07, Daniele Alessandri <suppakilla@gmail.com> 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:"]
4e57ccb3833a52fcdf0729cb5ca0218f?d=identicon&s=25 Lili Lilisa (lili)
on 2007-06-24 16:33
Fabio Petrucci 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 babybella@tiscali.it
This topic is locked and can not be replied to.