File.Delete("D:\\filler.tmp"); // now %free space is 41
var freeSpaceCounter=new PerformanceCounter("LogicalDisk", "% Free Space", "D:");
freeSpaceCounter.NextSample();
Console.WriteLine(freeSpaceCounter.NextValue()); // returns 41
freeSpaceCounter.Dispose();
freeSpaceCounter.Close();
Thread.Sleep(1000);
Process p = Process.Start("fsutil", "file createnew d:\\filler.tmp 16000000000");
p.WaitForExit(); // now % free space is 1
Thread.Sleep(1000);
freeSpaceCounter = new PerformanceCounter("LogicalDisk", "% Free Space", "D:");
freeSpaceCounter.NextSample();
Console.WriteLine(freeSpaceCounter.NextValue()); // returns 41
Console.WriteLine(freeSpaceCounter.NextValue()); // returns 41
Thread.Sleep(1000);
freeSpaceCounter.NextSample();
Console.WriteLine(freeSpaceCounter.NextValue()); // returns 41
Console.WriteLine(freeSpaceCounter.NextValue()); // returns 41
実際の値が1になると、41を返すのはなぜですか?現在の値を何度得ることができますか?パフォーマンスカウンタNextValueは以前の同じ値を返します
私が掲載したコードは、ローカルマシンとリモートマシンで同様の動作をします。私はDriveInfoクラスを使用することはできませんので、リモートマシン上の空きディスク容量を照会する必要があります。 –
しかし、PerformanceCountersを使用する必要がありますか?代わりにWMIはどうですか? –
リモートマシンでWMIがアンインストールされた場合 –