ローカルドライブ情報をASP.NETでJSON文字列として出力する。
超適当に書いたコードで、まだバグあるかと思います。
ドライブレターなんて文字列なのに引用符で囲ってないとか、他色々
■コード(aspx)
<%@ Page Language="C#" CodeBehind="Default.aspx.cs" Inherits="GetDiscSizeAjax._Default" %>
■コード(aspx.cs)
using System; using System.IO; using System.Collections.Generic; using System.Diagnostics; using System.Web; using System.Web.Configuration; using System.Web.UI; using System.Text; namespace GetDiscSizeAjax { 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("DriveLetter:{0}", item.Name); sb.AppendFormat(",Size:{0}", item.TotalSize); sb.AppendFormat(",TotalSize:{0}", (item.TotalSize - item.TotalFreeSpace)); sb.AppendFormat(",TotalFreeSpace:{0}", item.TotalFreeSpace); sb.AppendFormat(",Rate:{0}", c); 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"?> <!-- ASP.NET アプリケーションを構成する方法の詳細については、 http://go.microsoft.com/fwlink/?LinkId=169433 を参照してください --> <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}]