ローカルドライブ情報をASP.NETでJSON文字列として出力する。 part.2

とりあえず、こんな感じで動くかもしれません。
jQueryコードは後日作成予定


■コード(aspx)

<%@ Page Language="C#" CodeBehind="Default.aspx.cs" Inherits="GetDiscSizeAjax._Default" %>


■コード(aspx.cs)

public partial class _Default : System.Web.UI.Page
{
    private static List<DriveType> GetDriveTypes()
    {
        var dts = WebConfigurationManager.AppSettings["DriveTypes"];
        if (string.IsNullOrEmpty(dts)) return null;

        var list = new List<DriveType>();
        foreach(var str in dts.Split(',')){
            DriveType? item = null;
            try
            {
                item = (DriveType)Enum.Parse(typeof(DriveType), str);
            }
            catch { }
            if (item.HasValue)
            {
                list.Add(item.Value);
            }
        }
        return list;
    }

    private static string GetDriveSize()
    {
        var sb = new StringBuilder();
        var list = GetDriveTypes();

        // 設定ファイルに設定がない場合はローカルディスクのみの情報を取得する。
        if (list == null || list.Count <= 0)
        {
            list = new List<DriveType>();
            list.Add(DriveType.Fixed);
        }

        sb.Append("[");

        var loop = 0;
        var infos = DriveInfo.GetDrives();
        foreach (var item in infos)
        {
            // HDDの種類でフィルタリングする
            if (list.Exists(x => x == item.DriveType))
            {
                var a = new Decimal(item.TotalFreeSpace);
                var b = new Decimal(item.TotalSize);
                var c = (a / b) * 100;
                c = Decimal.Round(c, 2);

                // HDDの情報を設定
                if (0 < loop)
                {
                    sb.Append(",");
                }
                sb.Append("{");
                sb.AppendFormat("dl:\"{0}\"", item.Name);                           //DriveLetter
                sb.AppendFormat(",s:{0}", item.TotalSize);                          //Size
                sb.AppendFormat(",ts:{0}", (item.TotalSize - item.TotalFreeSpace)); //TotalSize
                sb.AppendFormat(",tfs:{0}", item.TotalFreeSpace);                   //TotalFreeSpace
                sb.AppendFormat(",r:{0}", c);                                       //Rate
                sb.Append("}");

                loop++;
            }
        }

        sb.Append("]");

        return sb.ToString();
    }

    protected override void Render(HtmlTextWriter writer)
    {
        // 既存レンダリングをOFFにする。
        //base.Render(writer);

        var str = "";
        try
        {
            str = GetDriveSize();
        }
        catch (Exception ex)
        {
            str = string.Format("{ErrorInfo:{0}}", ex.ToString());
        }
        writer.WriteLine(str);
    }
}

■web.config

<?xml version="1.0"?>
<configuration>
	<appSettings>
		<add key="DriveTypes" value="Fixed,bb"/>
	</appSettings>
	<system.web>
		<trace enabled="true" localOnly="false"/>
		<compilation debug="true"/></system.web>
</configuration>


■実行結果

【前回】
[{DriveLetter:"C:\",Size:243476480000,TotalSize:85621563392,TotalFreeSpace:157854916608,Rate:64.83}]
【現在】
[{dl:"C:\",s:243476480000,ts:85632450560,tfs:157844029440,r:64.83}]

_