たけ(tk)です。

Kazuhiro NISHIYAMA さん曰く。
》Apolloには何かあるかも。

  残念ながら

puts Win.dos_dir( 'c:/*.*',Win::FA_VOLUME_ID)

では駄目でした。WINというのはDOSとの互換性はないわけね。

 CDROMのラベルの取得っていうのは Unix 系でも必要になると思うけれど、
どうやるんでしょう?。

--

#西山さん方式
def volume_information( root_path_name )
  require 'Win32API'
  volume_name = ' '*1000
  system_name = ' '*1000
  sizeof_long = 4
  file_name_len = ' ' * sizeof_long
  serial_number = ' ' * sizeof_long
  flags = ' ' * sizeof_long                   
  ret = Win32API.new('kernel32','GetVolumeInformationA','PPLPPPPL','I').
    call( 
      root_path_name, 
      volume_name, 1000,
      serial_number, 
      file_name_len, 
      flags, 
      system_name, 1000)
  return  [
      ret,
      volume_name.split("\0")[0],
      serial_number.unpack("L")[0],
      file_name_len.unpack("L")[0],
      flags.unpack('L')[0],
      system_name.split("\0")[0],
      ]
end
def volume_name( root_path_name )
  return volume_information( root_path_name )[1]
end

とか

# arton さん方式
def volume_name( root_path_name)
  require 'win32ole'
  WIN32OLE.new("Scripting.FileSystemObject").GetDrive( root_path_name ).VolumeName
end

とかというのを作っておくと簡単かも。

たけ(tk) ggb03124 / nifty.ne.jp
http://member.nifty.ne.jp/take_tk