📄 disksize.cs
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.Linq;
using System.Threading;
using System.IO;
using System.Reflection;
using CarlosAg.ExcelXmlWriter;
using System.Diagnostics;
namespace DiskAnalyzer
{
public partial class DiskSize : Form
{
public const string MY_COMPUTER = "My Computer";
public string LastScanDirectory = "";
public DiskSize()
{
InitializeComponent();
}
private void loadDirectoryTree()
{
this.slblCurrent.Text = "Directory tree is loading...";
statusStrip1.Refresh();
this.tvDirectory.PathSeparator = Path.DirectorySeparatorChar.ToString();
TreeNode newNode = new TreeNode(MY_COMPUTER);
newNode.ImageIndex = 0;
this.tvDirectory.Nodes.Add(newNode);
tvDirectory.SelectedNode = newNode;
foreach (DriveInfo di in DriveInfo.GetDrives())
{
newNode = new TreeNode(di.Name.Remove(2));
newNode.ImageIndex = 1;
tvDirectory.Nodes[0].Nodes.Add(newNode);
getSubDirectories(newNode);
}
this.slblCurrent.Text = "Completed";
}
private static DataTable GetDriveDataTable()
{
DriveInfo[] drives = DriveInfo.GetDrives();
DataTable dtDriveInfo = new DataTable();
dtDriveInfo.Columns.Add("Drive Name");
dtDriveInfo.Columns.Add("Total Size(GB)");
dtDriveInfo.Columns.Add("Free Space");
DataRow drDriveInfo;
foreach (DriveInfo di in drives)
{
if (di.IsReady)
{
drDriveInfo = dtDriveInfo.NewRow();
drDriveInfo.ItemArray = new Object[] { di.Name, Math.Round(di.TotalSize / Math.Pow(10, 9), 2), Math.Round(di.TotalFreeSpace / Math.Pow(10, 9), 2) };
dtDriveInfo.Rows.Add(drDriveInfo);
}
}
return dtDriveInfo;
}
private void DirectorySize_Load(object sender, EventArgs e)
{
dataGridViewDirectory.Columns.Clear();
dataGridViewDirectory.AutoGenerateColumns = true;
loadDirectoryTree();
loadDefaultView();
InitPieChartControls();
tvDirectory.Focus();
}
private void InitPieChartControls()
{
PieChartControlDirectory.SliceRelativeHeight = 0.20F;
PieChartControlDirectory.EdgeLineWidth = 0.25F;
PieChartControlDirectory.EdgeColorType = System.Drawing.PieChart.EdgeColorType.DarkerThanSurface;
PieChartControlDirectory.ShadowStyle = System.Drawing.PieChart.ShadowStyle.GradualShadow;
PieChartControlDirectory.RightMargin = 10;
PieChartControlDirectory.LeftMargin = 10;
pieChartControlFileTypes.SliceRelativeHeight = 0.20F;
pieChartControlFileTypes.EdgeLineWidth = 0.25F;
pieChartControlFileTypes.EdgeColorType = System.Drawing.PieChart.EdgeColorType.DarkerThanSurface;
pieChartControlFileTypes.ShadowStyle = System.Drawing.PieChart.ShadowStyle.GradualShadow;
pieChartControlFileTypes.RightMargin = 10;
pieChartControlFileTypes.LeftMargin = 10;
}
private void loadDefaultView()
{
DataTable dtDriveInfo = GetDriveDataTable();
InitializeChart(dtDriveInfo);
InitializeGrid(dtDriveInfo);
if (dataGridViewDirectory.Columns.Count > 1)
dataGridViewDirectory.Columns[1].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
if (dataGridViewDirectory.Columns.Count > 2)
dataGridViewDirectory.Columns[2].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
}
List<string> lstAuthException = new List<string>();
private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)
{
getSubDirectories(e.Node);
}
private void getSubDirectories(TreeNode parent)
{
DirectoryInfo directory;
try
{
if (parent.Nodes.Count == 0)
{
string currDirectory = parent.FullPath.Remove(0, MY_COMPUTER.Length + 1).Replace(@"\\", @"\");
if (!currDirectory.EndsWith(@"\"))
currDirectory += @"\";
directory = new DirectoryInfo(currDirectory);
foreach (DirectoryInfo dir in directory.GetDirectories())
{
TreeNode newNode = new TreeNode(dir.Name);
newNode.ImageIndex = 2;
parent.Nodes.Add(newNode);
}
}
foreach (TreeNode node in parent.Nodes)
{
if (node.Nodes.Count == 0)
{
string currDirectory = node.FullPath.Remove(0, MY_COMPUTER.Length + 1).Replace(@"\\", @"\");
if (!currDirectory.EndsWith(@"\"))
currDirectory += @"\";
directory = new DirectoryInfo(currDirectory);
try
{
foreach (DirectoryInfo dir in directory.GetDirectories())
{
TreeNode newNode = new TreeNode(dir.Name);
newNode.ImageIndex = 2;
node.Nodes.Add(newNode);
}
}
catch (UnauthorizedAccessException)
{
lstAuthException.Add(currDirectory);
}
}
}
}
catch (Exception doh)
{
Console.WriteLine(doh.Message);
}
}
private void treeView1_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
{
ExecuteDirectorySize();
}
private void ExecuteDirectorySize()
{
this.slblCurrent.Text = "Please Wait!! Analyzing...";
CalculateDirectorySize pw = null;
ResetPieCharts();
if (tvDirectory.SelectedNode != null)
{
if (tvDirectory.SelectedNode.Text != MY_COMPUTER)
{
pw = new CalculateDirectorySize();
pw.filterOptions = filterOptions;
pw.Owner = this;
pw.SelectedNodeText = tvDirectory.SelectedNode.Text;
try
{
pw.ShowDialog(this);
}
catch (TargetInvocationException tiEx)
{
MessageBox.Show(tiEx.InnerException.Message, "Error Occured", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
LastScanDirectory = pw.RootScanDirectory;
InitilizeDirectoryAnalysisData(pw);
}
else if (tvDirectory.SelectedNode.Text == MY_COMPUTER)
{
treeFileTypes.Nodes.Clear();
pw = new CalculateDirectorySize();
pw.Owner = this;
pw.SelectedNodeText = tvDirectory.SelectedNode.Text;
LastScanDirectory = "MY_COMPUTER";
// Dislay Drive Info
InitializeDriveChart();
tvDirectory.SelectedNode.Expand();
if (dataGridViewDirectory.Columns.Count > 0)
{
dataGridViewDirectory.Columns[1].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
dataGridViewDirectory.Columns[2].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
}
}
this.slblCurrent.Text = "Done";
}
}
private void InitilizeDirectoryAnalysisData(CalculateDirectorySize pw)
{
InitializeChart(pw.DirectoryInformation);
InitializeChartFileTypes(pw.DirectoryDictionary);
InitializeGrid(pw.DirectoryInformation);
InitializeGridFileTypes(pw.FileList, pw.DirectoryDictionary);
}
private void ResetPieCharts()
{
PieChartControlDirectory.Texts = null;
PieChartControlDirectory.Values = null;
PieChartControlDirectory.ToolTips = null;
PieChartControlDirectory.SliceRelativeDisplacements = null;
pieChartControlFileTypes.Texts = null;
pieChartControlFileTypes.Values = null;
pieChartControlFileTypes.ToolTips = null;
pieChartControlFileTypes.SliceRelativeDisplacements = null;
}
private void InitializeGridFileTypes(
Dictionary<FileSize, List<FileSize>> dicTypeNames,
Dictionary<string, long> dicTypeSizes)
{
treeFileTypes.Nodes.Clear();
FileSize[] arrFs = dicTypeNames.Keys.ToArray();
Array.Sort(arrFs, new FileSize("", 0, ""));
foreach (FileSize fsKey in arrFs)
{
string SetBytes = convertSize(dicTypeSizes[fsKey.FileName]);
AdvancedDataGridView.TreeGridNode tvNode = treeFileTypes.Nodes.Add(fsKey.FileName, SetBytes, "");
tvNode.ImageIndex = 4;
int count = 0;
dicTypeNames[fsKey].Sort(new FileSize("", 0, ""));
foreach (FileSize fs in dicTypeNames[fsKey])
{
SetBytes = convertSize(fs.Size);
AdvancedDataGridView.TreeGridNode tvChildNode
= tvNode.Nodes.Add(fs.FileName, SetBytes, fs.Path);
tvChildNode.ImageIndex = 5;
if (count++ >= 4) break;
}
}
}
private void InitializeChartFileTypes(Dictionary<string, long> dicFileTypes)
{
decimal[] Values = new decimal[dicFileTypes.Count];
float[] Displacements = new float[dicFileTypes.Count];
string[] Texts = new string[dicFileTypes.Count];
string[] ToolTips = new string[dicFileTypes.Count];
List<Color> lstColors = new List<Color>();
lstColors.Add(Color.FromArgb(122, Color.AliceBlue));
lstColors.Add(Color.FromArgb(122, Color.Aquamarine));
lstColors.Add(Color.FromArgb(122, Color.Azure));
lstColors.Add(Color.FromArgb(122, Color.Beige));
lstColors.Add(Color.FromArgb(122, Color.Bisque));
lstColors.Add(Color.FromArgb(122, Color.AntiqueWhite));
lstColors.Add(Color.FromArgb(122, Color.BlanchedAlmond));
lstColors.Add(Color.FromArgb(122, Color.BlueViolet));
lstColors.Add(Color.FromArgb(122, Color.BurlyWood));
lstColors.Add(Color.FromArgb(122, Color.CadetBlue));
lstColors.Add(Color.FromArgb(122, Color.Red));
lstColors.Add(Color.FromArgb(122, Color.Chartreuse));
lstColors.Add(Color.FromArgb(122, Color.Chocolate));
lstColors.Add(Color.FromArgb(122, Color.Coral));
lstColors.Add(Color.FromArgb(122, Color.CornflowerBlue));
lstColors.Add(Color.FromArgb(122, Color.Cornsilk));
lstColors.Add(Color.FromArgb(122, Color.Crimson));
lstColors.Add(Color.FromArgb(122, Color.Cyan));
lstColors.Add(Color.FromArgb(122, Color.DarkBlue));
lstColors.Add(Color.FromArgb(122, Color.DarkCyan));
lstColors.Add(Color.FromArgb(122, Color.Blue));
lstColors.Add(Color.FromArgb(122, Color.Brown));
lstColors.Add(Color.FromArgb(122, Color.Orange));
lstColors.Add(Color.FromArgb(122, Color.Green));
lstColors.Add(Color.FromArgb(122, Color.Aqua));
lstColors.Add(Color.FromArgb(122, Color.Olive));
lstColors.Add(Color.FromArgb(122, Color.PaleGreen));
lstColors.Add(Color.FromArgb(122, Color.Plum));
lstColors.Add(Color.FromArgb(122, Color.RosyBrown));
lstColors.Add(Color.FromArgb(122, Color.Salmon));
Color[] Colors = lstColors.ToArray();
Texts = dicFileTypes.Keys.ToArray();
int i = 0;
foreach (decimal dirSize in dicFileTypes.Values)
{
string SetBytes = "";
if (dirSize >= 1073741824)
{
SetBytes = String.Format("{0:N2} GB", ((dirSize / 1024) / 1024) / 1024);
}
else if (dirSize >= 1048576)
{
SetBytes = String.Format("{0:N2} MB", (dirSize / 1024) / 1024);
}
else if (dirSize >= 1024)
{
SetBytes = String.Format("{0:N2} KB", (dirSize / 1024));
}
else if (dirSize < 1024)
{
SetBytes = dirSize.ToString() + " Bytes";
}
Values[i] = (decimal)dicFileTypes[Texts[i]];
Displacements[i] = 0.05F;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -