tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re: 物理ドライブ(指定ドライブ)情報を取得
投稿日: 2016/04/20(Wed) 00:03
投稿者魔界の仮面弁士
> Dim Str() As String
VB には「Str 関数」がありますよね。
予約語ではないにせよ、その名前は混乱の元かも。

それと、WMI は IDisposable なので、Dispose した方がベターです。


>         For Each i In Str
>             For Each p In mc.GetInstances()
外側と内側のループは逆にした方がよいと思いますよ。


ループしないならこんな感じ。

Using p As New ManagementObject($"Win32_LogicalDisk.DeviceId=""C:""")
    p.Get()

    strMem = $"Name={p!Name}
FileSystem={p!FileSystem}
FreeSpace={p!FreeSpace}
Size={p!Size}
VolumeName={p!VolumeName}
VolumeSerialNumber={p!VolumeSerialNumber}"

End Using


p("FreeSpace") とか p.Item("FreeSpace") とか
p.Properties("FreeSpace").Value でも良いですけど。



元のコードのように ManagementObjectCollection を使うなら、WQL にする手もありますよ。


Dim wql = "
SELECT
  Name, FileSystem, FreeSpace, Size,
  VolumeName, VolumeSerialNumber
FROM
  Win32_LogicalDisk
WHERE
  MediaType=12  OR  MediaType IS NULL
"

strMem = ""
Using mc = New ManagementObjectSearcher(wql), disks = mc.Get()
    For Each p In disks

        strMem &= $"
Name={p!Name}
FileSystem={p!FileSystem}
FreeSpace={p!FreeSpace}
Size={p!Size}
VolumeName={p!VolumeName}
VolumeSerialNumber={p!VolumeSerialNumber}
-----"

        p.Dispose()
    Next
End Using



ちなみに MediaType = 12 は、ドライブの種類が HDD(SSD) であるものを指しています。
ドライブ指定にしたいなら、WHERE DeviceId = 'C:' で抽出しておけば OK 。


    'winioctl.h
    Enum MEDIA_TYPE
        Unknown
        F5_1Pt2_512
        F3_1Pt44_512
        F3_2Pt88_512
        F3_20Pt8_512
        F3_720_512
        F5_360_512
        F5_320_512
        F5_320_1024
        F5_180_512
        F5_160_512
        RemovableMedia
        FixedMedia
    End Enum

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。