DOBON.NET DOBON.NETプログラミング掲示板過去ログ

パーティションについて

環境/言語:[.net framework 1.1]
分類:[.NET]

os:xp
vc++.net 2003
フォームアプリケーション(.net)

お世話になります。
1ドライブにパーティションがきられているかどうかをチェックしたいのですが、方法が見つからず困っています。何か方法はないでしょうか。

宜しくお願いします。
> 1ドライブにパーティションがきられているかどうかをチェックしたいのですが、方法が見つからず困っています。何か方法はないでしょうか。

WMI で情報取得できるかもしれないですね。
こんにちは、じゃんぬ です。

■No10246に返信(KTさんの記事)
> 1ドライブにパーティションがきられているかどうかをチェックしたいのですが、
> 方法が見つからず困っています。何か方法はないでしょうか。

Win32_DiskPartition クラスかな。
2005/04/05(Tue) 16:51:55 編集(投稿者)
2005/04/05(Tue) 16:51:47 編集(投稿者)

お返事ありがとうござます。

> WMI で情報取得できるかもしれないですね。
> Win32_DiskPartition クラスかな。

********************************************************************
Void button1_Click(System::Object * sender, System::EventArgs * e)
{
ManagementClass *diskClass =
new ManagementClass("Win32_DiskPartition");
ManagementObjectCollection *disks = diskClass->GetInstances();

IEnumerator *i = disks->GetEnumerator();
while( i->MoveNext() ) {
ManagementObject *disk =
dynamic_cast<ManagementObject *>(i->Current);
text1->text = disk->ToString();
}
}
********************************************************************
上記を実行した結果
Win32_DiskPartition.DeviceID="Disk #0, Partition #0
Win32_DiskPartition.DeviceID="Disk #0, Partition #1
と出力されました。
上記のうちPartitionの箇所だけを取得したいのですが、どのように指定すれば
取得できるのでしょうか。どうかよろしくお願いします。
こんにちは、じゃんぬ です。

■No10264に返信(KTさんの記事)
> 上記のうちPartitionの箇所だけを取得したいのですが、どのように指定すれば
> 取得できるのでしょうか。どうかよろしくお願いします。

そりゃ、ToString() してるのだからメンバ全部を取ってきちゃうでしょう。(^-^*)

各メンバについては以下を参照してください。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/win32_diskpartition.asp
ありがとうございます。

> 各メンバについては以下を参照してください。
> http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/win32_diskpartition.asp

指定方法はdiskのメソッドを使用して(イメージ disk["Size"])取得しようと
しているのですが、どうしても指定の仕方がわからなくて取得できません。
たびたび申し訳ないのですが、宜しくお願いします。
> 指定方法はdiskのメソッドを使用して(イメージ disk["Size"])取得しようと
> しているのですが、どうしても指定の仕方がわからなくて取得できません。
> たびたび申し訳ないのですが、宜しくお願いします。
※横スマソw;
 じゃんぬねっとさんが示したURLで"DiskIndex"か"DeviceID"かな〜と予想は付いたので、
ノ<久々に#Devつかってこんなので実験してみますた
foreach(ManagementObject x in
(new ManagementClass("Win32_DiskPartition")).GetInstances())
foreach(PropertyData pd in x.Properties)
if(pd.Value!=null)
if(MessageBox.Show(pd.Name +" "+pd.Value.ToString(),"",MessageBoxButtons.OKCancel)==DialogResult.Cancel)
break;
で、DiskIndexがそれっぽいので、
[ManagementObject].GetPropertyValue("DiskIndex")で見てみると、やっぱりそれっぽかったです。

…ぁぁ、C#に乗り換えないと…若年寄になってしまう(or---z
2005/04/07(Thu) 16:45:37 編集(投稿者)
2005/04/07(Thu) 16:45:34 編集(投稿者)

解決したと思いましたが、まだでした(;_;)p

***********************************************************************
ManagementClass *diskClass =
new ManagementClass("Win32_DiskPartition");
ManagementObjectCollection *disks =
diskClass->GetInstances();

IEnumerator *i = disks->GetEnumerator();
while( i->MoveNext() ) {
ManagementObject *disk =
dynamic_cast<ManagementObject *>(i->Current);
Object *pobjDiskInfo =
disk->GetPropertyValue("DiskIndex");
System::Diagnostics::Debug::WriteLine(pobjDiskInfo->ToString());
}

***********************************************************************
現在、上のコーディングで以下のような結果がでていますが、
0
1
この0のドライブレター(C:とか)が何かを知る方法がどうしても見つかりません。
何か方法はないでしょうか。

DOBON.NET | プログラミング道 | プログラミング掲示板