From: Jan Svitok Date: 2006-11-22T06:10:46+09:00 Subject: Re: getting volume names in windows On 11/21/06, Alfonso wrote: > Jan Svitok escribi�: > > On 11/20/06, Alfonso wrote: > >> Does anyone knows how can you get the volume name of a drive in windows? > >> I'm writting a program that should get the name of the cd or dvd > >> inserted in the drive. The user selects a directory using a gtk dialog > >> (filechooser), and then I have the path of the folder; but when you > >> select a cd/dvd, you get only the letter of the drive (E:\, D:\,...). > >> > >> I have tried also File.dirname(name_of_a_file_in_the_dvd). It doesn't > >> give you the cd/dvd name... > >> > >> Thank's in advance > > > > I guess there's some WINAPI (use WIN32API) for that, or WScript (COM > > -> use WIN32OLE) or WMI (COM). Just google a bit (and see Programming > > Ruby how to use those libs). > > > > > Thank you very much for the idea, I'm going to have a look at that win32ole try: Listing 4.3 Enumerating Disk Drive Properties 1. Set objFSO = CreateObject("Scripting.FileSystemObject") 2. Set colDrives = objFSO.Drives 3. For Each objDrive in colDrives 4. Wscript.Echo "Available space: " & objDrive.AvailableSpace 5. Wscript.Echo "Drive letter: " & objDrive.DriveLetter 6. Wscript.Echo "Drive type: " & objDrive.DriveType 7. Wscript.Echo "File system: " & objDrive.FileSystem 8. Wscript.Echo "Is ready: " & objDrive.IsReady 9. Wscript.Echo "Path: " & objDrive.Path 10. Wscript.Echo "Root folder: " & objDrive.RootFolder 11. Wscript.Echo "Serial number: " & objDrive.SerialNumber 12. Wscript.Echo "Share name: " & objDrive.ShareName 13. Wscript.Echo "Total size: " & objDrive.TotalSize 14. Wscript.Echo "Volume name: " & objDrive.VolumeName 15. Next When the script in Listing 4.3 runs under CScript, information similar to the following appears in the command window: Available space: 10234975744 Drive letter: C Drive type: 2 File system: NTFS Free space: 10234975744 Is ready: True Path: C: Root folder: C:\ Serial number: 1343555846 Share name: Total size: 20398661632 Volume name: Hard Drive from: http://discuss.develop.com/archives/wa.exe?A2=ind0511d&L=dotnet-winforms&T=0&F=&S=&P=2611 That would be in ruby: require 'win32ole' file_system = WIN32OLE.new("Scripting.FileSystemObject") drives = file_system.Drives drives.each do |drive| puts "Available space: #{drive.AvailableSpace}" puts "Drive letter: #{drive.DriveLetter}" puts "Drive type: #{drive.DriveType}" puts "File system: #{drive.FileSystem}" puts "Is ready: #{drive.IsReady}" puts "Path: #{drive.Path}" puts "Root folder: #{drive.RootFolder}" puts "Serial number: #{drive.SerialNumber}" puts "Share name: #{drive.ShareName}" puts "Total size: #{drive.TotalSize}" puts "Volume name: #{drive.VolumeName}" end (beware, not tested code so errors can be there!)