⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 disksize.cs

📁 磁盘管理和分析软件
💻 CS
📖 第 1 页 / 共 2 页
字号:
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 + -