哪位大哥帮忙注释一下代码,新手,学习中,还请尽量详细,不甚感激!~using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Globalization;
using System.Threading;namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        private string oldName;
        public Form1()
        {
            InitializeComponent();
        }        public void RunSetupCode()
        {
            this.treeView1.Nodes.Clear();
            DriveInfo[] drivers = DriveInfo.GetDrives();            oldName = string.Empty;
            TreeNode mainNode = this.treeView1.Nodes.Add("Desktop");
            TreeNode myComputer = this.treeView1.Nodes.Add("My Computer");            foreach (DriveInfo d in drivers)
            {
                TreeNode topNode = myComputer.Nodes.Add(GetNameAndType(d));
                topNode.Tag = d.Name;                if (d.IsReady)
                {
                    AddSubNodes(topNode, d.Name, true);
                }
            }
        }        string GetNameAndType(DriveInfo d)
        {
            return string.Format(CultureInfo.CurrentCulture, "{0} {1}", GetDriveType(d, false), d.Name.Substring(0, 2));
        }        string GetDriveType(DriveInfo d, bool network)
        {
            string typeName;
            switch (d.DriveType)
            {
                case DriveType.Removable:
                    typeName = "Floppy";
                    break;
                case DriveType.CDRom:
                    typeName = "CD Drive";
                    break;
                case DriveType.Fixed:
                    typeName = "Local Disk";
                    break;
                case DriveType.Network:
                    typeName = "Network Drive";
                    break;
                default:
                    typeName = "Unknown";
                    break;
            }            return typeName;
        }        private void AddSubNodes(TreeNode node, string dirName, bool iterate)
        {
            try
            {
                foreach(string dir in Directory.GetDirectories(dirName))
                {
                    bool found = false;
                    foreach(TreeNode tn in node.Nodes)
                    {
                        if(tn.Text == dir.Substring(dir.LastIndexOf("\\") + 1))
                        {
                            found = true;
                        }
                    }
                    if (!found)
                    {
                        TreeNode subNode = node.Nodes.Add(dir.Substring(dir.LastIndexOf("\\") + 1));
                        subNode.Tag = dir;
                        if (iterate)
                        {
                            AddSubNodes(subNode, dir, false);
                        }
                    }
                }
            }
            catch (UnauthorizedAccessException uae)
            {
                //MessageBox.Show(uae.Message);
            }
            finally
            {
            }
        }        private void Form1_Load(object sender, EventArgs e)
        {
            RunSetupCode();
        }        private void treeView1_AfterExpand(object sender, TreeViewEventArgs e)
        {
            if (e.Node.Parent != null)
            {
                if (e.Node.Parent.Text != "Desktop")
                {
                    foreach (TreeNode tn in e.Node.Nodes)
                    {
                        AddSubNodes(tn, tn.Tag.ToString(), false);
                    }
                }
            }
        }        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
            if (e.Node.Parent != null)
            {
                if (e.Node.Parent.Text != "Desktop")
                {
                    DriveInfo d = new DriveInfo(e.Node.Tag.ToString());
                    if (!d.IsReady)
                    {
                        MessageBox.Show("请将磁盘插入驱动器 " + d.Name + " 中", "插入磁盘");
                        this.listView1.Items.Clear();
                    }
                    FillList(e.Node);
                }
                else
                {
                    this.listView1.Items.Clear();
                    foreach (TreeNode node in e.Node.Nodes)
                    {
                        ListViewItem lvi = new ListViewItem(node.Text);
                        this.listView1.Items.Add(lvi);
                    }
                }
            }
            else
            {
                this.listView1.Items.Clear();
                ListViewItem lvi = new ListViewItem("My Computer");
                this.listView1.Items.Add(lvi);
            }
        }        private void FillList(TreeNode tn)
        {
            ListViewItem lvi;
            this.listView1.Items.Clear();            foreach (string dir in Directory.GetDirectories(tn.Tag.ToString()))
            {
                lvi = new ListViewItem();
                lvi.Text = dir.Substring(dir.LastIndexOf("\\") + 1);
                lvi.SubItems.Add("");
                lvi.SubItems.Add("File Folder");
                lvi.SubItems.Add(Directory.GetLastWriteTime(dir).ToString(String.Format(CultureInfo.CurrentCulture, "MM{0}dd{0}yyyy hh{1}mm tt", Thread.CurrentThread.CurrentCulture.DateTimeFormat.DateSeparator, Thread.CurrentThread.CurrentCulture.DateTimeFormat.TimeSeparator), CultureInfo.CurrentCulture));
                this.listView1.Items.Add(lvi);
            }            foreach (string nextFile in Directory.GetFiles(tn.Tag.ToString()))
            {
                if (((File.GetAttributes(nextFile) & FileAttributes.System) != FileAttributes.System) && ((File.GetAttributes(nextFile) & FileAttributes.Hidden) != FileAttributes.Hidden))
                {
                    long size;
                    size = new FileInfo(nextFile).Length;
                    if (size > 0 && size < 1000)
                    {
                        size = 1;
                    }
                    else if (size > 1000)
                    {
                        size = size / 1000;
                    }
                    
                    lvi = new ListViewItem();
                    lvi.Text = Path.GetFileName(nextFile);
                    lvi.SubItems.Add(String.Format(CultureInfo.CurrentCulture, "{0:N0} KB", size));
                    lvi.SubItems.Add("File");
                    lvi.SubItems.Add(File.GetLastWriteTime(nextFile).ToString(String.Format(CultureInfo.CurrentCulture, "MM{0}dd{0}yyyy hh{1}mm tt", Thread.CurrentThread.CurrentCulture.DateTimeFormat.DateSeparator, Thread.CurrentThread.CurrentCulture.DateTimeFormat.TimeSeparator), CultureInfo.CurrentCulture));
                    this.listView1.Items.Add(lvi);
                }
            }
        }
    }
}