LoginSignup
0
1

More than 5 years have passed since last update.

ドライブの容量と空き領域を取得する

Last updated at Posted at 2018-07-31

各ドライブの容量と空き領域を取得するサンプルです。

C#でドライブ毎のディスク容量と空き容量取得」と「C#の匿名型について調べてみた」、「匿名型の入れ子や匿名型配列が作れる」を参考にさせていただきました。

using System;
using System.Linq;

namespace ConsoleApp1
{
    class Program
    {
        static void Main()
        {
            foreach (var drive in System.IO.DriveInfo.GetDrives())
            {
                if (!drive.IsReady) continue;
                Console.WriteLine("{0} ({1}) 空き領域 {2}/{3}",
                    drive.VolumeLabel,
                    drive.RootDirectory.Name,
                    PrettyFormat(drive.TotalFreeSpace),
                    PrettyFormat(drive.TotalSize));
            }
        }

        private static string PrettyFormat(double value)
        {
            var data = new[]
            {
                new { max = 1024d,                    baseValue = 1d,                f = 1,   format = "{0:0} byte" },
                new { max = Math.Pow(1024, 1) * 10,   baseValue = Math.Pow(1024, 1), f = 100, format = "{0:0.00} KB" },
                new { max = Math.Pow(1024, 1) * 100,  baseValue = Math.Pow(1024, 1), f = 10,  format = "{0:0.0} KB" },
                new { max = Math.Pow(1024, 1) * 1000, baseValue = Math.Pow(1024, 1), f = 1,   format = "{0:0} KB" },
                new { max = Math.Pow(1024, 2) * 10,   baseValue = Math.Pow(1024, 2), f = 100, format = "{0:0.00} MB" },
                new { max = Math.Pow(1024, 2) * 100,  baseValue = Math.Pow(1024, 2), f = 10,  format = "{0:0.0} MB" },
                new { max = Math.Pow(1024, 2) * 1000, baseValue = Math.Pow(1024, 2), f = 1,   format = "{0:0} MB" },
                new { max = Math.Pow(1024, 3) * 10,   baseValue = Math.Pow(1024, 3), f = 100, format = "{0:0.00} GB" },
                new { max = Math.Pow(1024, 3) * 100,  baseValue = Math.Pow(1024, 3), f = 10,  format = "{0:0.0} GB" },
                new { max = Math.Pow(1024, 3) * 1000, baseValue = Math.Pow(1024, 3), f = 1,   format = "{0:0} GB" },
                new { max = Math.Pow(1024, 4) * 10,   baseValue = Math.Pow(1024, 4), f = 100, format = "{0:0.00} TB" },
                new { max = Math.Pow(1024, 4) * 100,  baseValue = Math.Pow(1024, 4), f = 10,  format = "{0:0.0} TB" },
                new { max = Math.Pow(1024, 4) * 1000, baseValue = Math.Pow(1024, 4), f = 1,   format = "{0:0} TB" },
                new { max = Math.Pow(1024, 5) * 10,   baseValue = Math.Pow(1024, 5), f = 100, format = "{0:0.00} PB" },
                new { max = Math.Pow(1024, 5) * 100,  baseValue = Math.Pow(1024, 5), f = 10,  format = "{0:0.0} PB" },
                new { max = Math.Pow(1024, 5) * 1000, baseValue = Math.Pow(1024, 5), f = 1,   format = "{0:0} PB" },
            };
            var datum = data.FirstOrDefault(_ => value < _.max);
            if (datum == null) return string.Format("{0:0.00} EB", value / Math.Pow(1024, 6));
            var v = Math.Floor(value / datum.baseValue * datum.f) / datum.f;
            return string.Format(datum.format, v);
        }
    }
}
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1