C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[10]: ネットワークでつながったサーバーのドライブ容量


(過去ログ 12 を表示中)

[トピック内 15 記事 (1 - 15 表示)]  << 0 >>

■2983 / inTopicNo.1)  ネットワークでつながったサーバーのドライブ容量確認
  
□投稿者/ もえりん (1回)-(2007/04/20(Fri) 11:54:32)

分類:[C# (ASP.NET)] 

環境/言語:[C#.NET、.NET Framework2.0] 

Windows Applicationでネットワークでつながったサーバーのドライブ容量と空き容量を確認したいのですが、方法が全くわかりません。
以下はローカルのCドライブの容量を確認して、テキストボックスに表示させているもので、これを応用したいと思っています。

System.IO.DriveInfo drive = new System.IO.DriveInfo("C");
  if (drive.IsReady)
  {
    textBox1.Text = drive.TotalSize.ToString();
    textBox2.Text = drive.TotalFreeSpace.ToString();
  }


このように自分のPCのドライブ容量などを確認する方法はすぐ見つかったのですが、ネットワークでつないでつないだ先のサーバーの内部を見るようなことはできるのでしょうか?
仮想ディレクトリを作って、容量を確認するという方法も考えたのですがわかりませんでした。
どんな方法でも構いませんので教えていただけませんか?
よろしくお願い致します。

引用返信 編集キー/
■2994 / inTopicNo.2)  Re[1]: ネットワークでつながったサーバーのドライブ容量
□投稿者/ WonderRabbit (8回)-(2007/04/20(Fri) 14:03:18)
WonderRabbit さんの Web サイト
2007/04/20(Fri) 14:05:39 編集(投稿者)

 Windowsのファイル共有(SMB)であれば、

System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(@"\\192.168.0.1\hoge");

 とかできます。実行環境で共有フォルダをネットワークドライブとして設定してしまえば何も考えずに提示されたコードでドライブとして扱う事もできます。

※初稿後、newの前には「System.IO.」を書いてたのに後には書いてなかったので編集して揃えました。
引用返信 編集キー/
■2995 / inTopicNo.3)  Re[2]: ネットワークでつながったサーバーのドライブ容量確認
□投稿者/ ちゃっぴ (8回)-(2007/04/20(Fri) 14:08:24)
ちゃっぴ さんの Web サイト
WMI 使えばいいでしょう。

ただし、XP 以降で remote の情報を取得する場合、Default では BUILTIN\Administrators の member である必要があります。
もっとも、DCOM と WMI control の ACL を編集することにより、権限を付与することは可能です。
引用返信 編集キー/
■3005 / inTopicNo.4)  Re[2]: ネットワークでつながったサーバーのドライブ容量
□投稿者/ もえりん (2回)-(2007/04/20(Fri) 16:15:32)
WonderRabbit さん、レスありがとうございます。

共有フォルダをネットワークドライブ割り当てということは、あらかじめそのサーバーマシンのフォルダを割り当てておいて


System.IO.DriveInfo drive = new System.IO.DriveInfo("z");
  if (drive.IsReady)
  {
    textBox1.Text = drive.TotalSize.ToString();
    textBox2.Text = drive.TotalFreeSpace.ToString();
  }


このようにするということでしょうか?

これをプログラムだけで実現することは不可能でしょうか?

実はこのプログラム汎用的に使用したいので、例えばIPアドレスとドライブ名をXMLか何かで外部的に情報を取り込んで処理したいと思っているのですが・・・

お手数をおかけしますが、よろしくお願いいたします。
引用返信 編集キー/
■3006 / inTopicNo.5)  Re[3]: ネットワークでつながったサーバーのドライブ容量確認
□投稿者/ もえりん (3回)-(2007/04/20(Fri) 16:21:33)
ちゃっぴ さん、レスありがとうございます。

WMIについては色々調べたのですが、初心者のためなかなか理解できませんでした。
こんな感じで書いてみたのですが、うまくいきません。。。

System.Management.ManagementObject mo = new System.Management.ManagementObject("Win32_LogicalDisk=\"192.168.0.0\\C:\"");
   ulong ts = (ulong)mo.Properties["Size"].Value;
   textBox1.Text = ts.ToString();
   ulong fs = (ulong)mo.Properties["FreeSpace"].Value;
   textBox2.Text = fs.ToString();

ManagementObjectの引数の与え方がわかりませんでした。

教えていただけませんか?
よろしくお願いいたします。
引用返信 編集キー/
■3017 / inTopicNo.6)  Re[3]: ネットワークでつながったサーバーのドライブ容量
□投稿者/ WonderRabbit (9回)-(2007/04/20(Fri) 21:52:24)
WonderRabbit さんの Web サイト
 質問の例示コードがDriveInfoでしたので、DirectoryInfoが使えますよ程度に提示したつもりでした。誤解を生んでしまったようで申し訳ありません。DriveInfoを使う為にわざわざネットワークドライブを割り当ててからどうのというプログラムは考えないで下さいorz

 DirectoryInfoが得られれば含まれるファイルサイズを得ることは比較的簡単にできます。

@IT
http://www.atmarkit.co.jp/fdotnet/dotnettips/357filesize/filesize.html

 が、この方法だと開き領域の情報が得られないので適切な回答になっていませんでした。やはりちゃっぴさんが提示されたようにWMIを利用するのがよいと思います。で、WMIについては私は教えられるほどスキルがありませんが、とりあえず"WMIパス"について正確な情報を得ては?

MSDN
http://msdn2.microsoft.com/ja-jp/library/15s54685(VS.80).aspx

引用返信 編集キー/
■3048 / inTopicNo.7)  Re[4]: ネットワークでつながったサーバーのドライブ容量
□投稿者/ ちゃっぴ (9回)-(2007/04/21(Sat) 21:23:03)
ちゃっぴ さんの Web サイト
2007/04/21(Sat) 22:07:44 編集(投稿者)
2007/04/21(Sat) 21:25:05 編集(投稿者)

WMI で Remote の情報を取得するには、ManagementScope で対象の remote computer を明示した名前空間を与えてやる必要があります。

ManagementScope クラス
http://msdn2.microsoft.com/ja-jp/library/system.management.managementscope(vs.80).aspx

それから、DeviceID property とかで filter をかけたい場合には、ObjectQuery class を使います。

ObjectQuery クラス
http://msdn2.microsoft.com/ja-jp/library/system.management.objectquery(vs.80).aspx

もっとも、DeviceID は Key なので WQL を使わずに下記のようにして直接 instance を生成することも可能でしょうけど。

Win32_LogicalDisk.DeviceID="D:"

それから、Remote に対しての WMI access はいろいろ security がかかっていますので、動作しない場合には下記を参考にして制限を緩和してください。
# たぶん近々 blog で解説します。

Connecting to WMI on a Remote Computer
http://msdn2.microsoft.com/en-us/library/aa389290.aspx
引用返信 編集キー/
■3132 / inTopicNo.8)  Re[4]: ネットワークでつながったサーバーのドライブ容量
□投稿者/ もえりん (5回)-(2007/04/24(Tue) 13:23:57)
WonderRabbit さん、返信遅くなりましたがレスありがとうございます。

早速WMIを利用する方法を調べやってみました。

なかなか難しいものですね。。。
引用返信 編集キー/
■3133 / inTopicNo.9)  Re[5]: ネットワークでつながったサーバーのドライブ容量
□投稿者/ もえりん (6回)-(2007/04/24(Tue) 13:24:06)
No3132 (もえりん さん) に返信
> WonderRabbit さん、返信遅くなりましたがレスありがとうございます。
>
> 早速WMIを利用する方法を調べやってみました。
>
> なかなか難しいものですね。。。
引用返信 編集キー/
■3136 / inTopicNo.10)  Re[5]: ネットワークでつながったサーバーのドライブ容量
□投稿者/ もえりん (7回)-(2007/04/24(Tue) 13:51:08)
2007/04/24(Tue) 13:51:44 編集(投稿者)

ちゃっぴさん、返信遅くなりました。レスありがとうございます。

色々ヒントをいただき自分なりにやってみたら一応できました。

しかしもうちょっと手を加えてみたいと思っているので、私の書いたソースを一度見ていただけませんか?
キレイじゃないんですが・・・

実は指定されたドライブだけの情報が知りたいのです。
もちろん下記のソースでも私の知りたいCドライブとDドライブの情報のみ取得します。
しかし、ある外部ファイルからドライブ名を指定し、その情報だけ取得したいと思っております。


ConnectionOptions options = new ConnectionOptions();

string pcpass = "\\\\" + (コンピュータ名) + "\\root\\cimv2";

ManagementScope scope = new ManagementScope(pcpass);
scope.Connect();

ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_LogicalDisk");

ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
ManagementObjectCollection queryCollection = searcher.Get();

foreach (ManagementObject m in queryCollection)
{
long size, free;
try
{
//総容量
size = long.Parse("" + m["Size"]);
//空き容量
free = long.Parse("" + m["FreeSpace"]);
// 単位
textBox1.Text += m + "の容量は約" + (size / 1024 / 1024 / 1024).ToString() + "GB";
textBox1.Text += "空き容量は約" + (free / 1024 / 1024 / 1024).ToString() + "GB" + "\r\n";
textBox1.Refresh();
}
catch
{
}
}

foreachのところでManagementObject型のmのところで、if文を書いてみるとか、ObjectQuery queryのところで例えば「"SELECT * FROM Win32_LogicalDisk.DeviceID="C:""」のように(この指定の仕方は間違っていますが、この「C:」と指定しているところを動的にしたいです)指定してみるという方法はやってみたのですが、どれもやり方がわかりませんでした。

ドライブの指定は別ファイルから読み込むので、ドライブ名は動的に変化します。

何度もすいません。。。何かいい方法はありませんでしょうか?

お手数をおかけしますが、よろしくお願いいたします。
引用返信 編集キー/
■3146 / inTopicNo.11)  Re[6]: ネットワークでつながったサーバーのドライブ容量
□投稿者/ ちゃっぴ (11回)-(2007/04/24(Tue) 17:41:24)
ちゃっぴ さんの Web サイト
>
Win32_LogicalDisk.DeviceID="D:"

これは ManagementObject に与える path です。
たぶんこれを与えることにより、いきなり instance が返ってくるでしょう。

Query の書式に関しては下記を参照してください。

WQL (SQL for WMI)
http://msdn2.microsoft.com/en-us/library/aa394606.aspx


引用返信 編集キー/
■3173 / inTopicNo.12)  Re[7]: ネットワークでつながったサーバーのドライブ容量
□投稿者/ もえりん (8回)-(2007/04/25(Wed) 11:19:03)
ちゃっぴさん、レスありがとうございます。

WQLの情報を色々と調べてみたのですが、理解できませんでした。。。

元々あまり情報がないのですね・・・

何かもう少しわかりやすいヒント教えていただけませんか?

よろしくお願いいたします。
引用返信 編集キー/
■3180 / inTopicNo.13)  Re[8]: ネットワークでつながったサーバーのドライブ容量
□投稿者/ ちゃっぴ (12回)-(2007/04/25(Wed) 13:48:05)
ちゃっぴ さんの Web サイト
> WQLの情報を色々と調べてみたのですが、理解できませんでした。。。

もしかして SQL も扱ったことないですか?

> 元々あまり情報がないのですね・・・

情報自体は結構あると思いますよ。主に英語ですがね。

ちなみに取得する対象が特定できている状態なら、query を使わなくても取得できます。

ManagementObject constructor にこのような感じで path を与えて見ましょう。

"\\\\ComputerName\\root\\cimv2:Win32_LogicalDisk.DeviceID=\"D:\""
引用返信 編集キー/
■3185 / inTopicNo.14)  Re[9]: ネットワークでつながったサーバーのドライブ容量
□投稿者/ もえりん (9回)-(2007/04/25(Wed) 14:53:07)
ちゃっぴさん、レスありがとうございます。


> もしかして SQL も扱ったことないですか?

SQLは基本的なことはわかるので、何をしているかはわかるのですが、指定方法が違うみたいでしたので。。。


> ManagementObject constructor にこのような感じで path を与えて見ましょう。
>
> "\\\\ComputerName\\root\\cimv2:Win32_LogicalDisk.DeviceID=\"D:\""

なるほど、こうやってやればいいのですね。
ありがとうございました。

もしかしたら今回はドライブ指定しなくていいかもしれなくなりました。
大変勉強になりました。
解決済み
引用返信 編集キー/
■3186 / inTopicNo.15)  Re[10]: ネットワークでつながったサーバーのドライブ容量
□投稿者/ ちゃっぴ (13回)-(2007/04/25(Wed) 15:03:33)
ちゃっぴ さんの Web サイト
>>もしかして SQL も扱ったことないですか?
>
> SQLは基本的なことはわかるので、何をしているかはわかるのですが、指定方法が違うみたいでしたので。。。

そういった場合、NG だったのを書いてみてください。
でないと何がわからないのか伝わりませんよ。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -