ローカルドライブ情報を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}]
_