In <20010924072212.3FE171BAF / dream.big.or.jp>
On Mon, 24 Sep 2001 16:22:13 +0900
bind <bind / dream.big.or.jp> wrote:
> CDなどドライブに割り振られている、
> Volume Labelを取得する方法を模索しているのですが、
> 良い方法が思い浮かばず困っております。
> 
> 何か良い方法は無いでしょうか?

ちょっと調べてみて、ちゃちゃっと作ってみたところこんな感じに
なりました。

適当なキーワードで使えそうなAPIの関数名を調べて、MoonWolfさんの
http://www.moonwolf.com/ruby/ にあるWin32ModuleでWin32API.newの
引数を調べて、実際に使ってみるという手順で作りました。


require 'Win32API'
GetVolumeInformationA = Win32API.new('kernel32','GetVolumeInformationA',
                                     'PPLPPPPL','I')

rootpathname = ARGV.shift || 'C:\\'

volume_name = ' '*1000
system_name = ' '*1000
sizeof_long = 4
serial_number = ' ' * sizeof_long
filenamelen = ' ' * sizeof_long
flags = ' ' * sizeof_long
p GetVolumeInformationA.call(rootpathname, volume_name, 1000,
    serial_number, filenamelen, flags, system_name, 1000)

p [volume_name.strip, system_name.strip, serial_number, filenamelen, flags]
p volume_name[/^[^\0]*/]



> File.stat(path).volumename とか 
> DOSish.volumename(path) 
> 
> なんてのがあると嬉しかったんですが。

Apolloには何かあるかも。


-- 
|ZnZ(ゼット エヌ ゼット)
|西山和広(Kazuhiro NISHIYAMA)