当前位置:编程学习 > C#/ASP.NET >>

上次看caozhy写了个linq的资源管理器,好屌。

我业余写了个,没分了只能发这里了。四不像版的,上了

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.IO;

namespace ExplorerDemon
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
            listView2.Items.Clear();
            if (e.Node.Tag != null)
            {
                var collection = from item in new DirectoryInfo(e.Node.Tag.ToString()).GetFileSystemInfos()
                                 select new
                                 {
                                     name = item.Name,
                                     type = item.GetType().ToString() == "System.IO.DirectoryInfo" ? "文件夹" : "文件",
                                     length = (item as FileInfo) != null ? (item as FileInfo).Length + "字节" : "",
                                     item.LastAccessTime
                                 };
                foreach (var item in collection)
                {
                    string[] lvItems = new string[] { item.name, item.type.ToString(), item.length, item.LastAccessTime.ToLongDateString() };
                    ListViewItem lv = new ListViewItem(lvItems);
                    listView2.Items.Add(lv);
                }
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            var array = from d in Environment.GetLogicalDrives()
                        where new DriveInfo(d).DriveType == DriveType.Fixed
                        select d;
            TreeNode nodeComputer = new TreeNode("我的电脑");       //我的电脑根节点
            treeView1.Nodes.Add(nodeComputer);
            foreach (var item in array)
            {
                TreeNode parentNode = new TreeNode(item);
                parentNode.Tag = new DirectoryInfo(item).FullName;
                nodeComputer.Nodes.Add(parentNode);                 //增加磁盘节点
                AddNode(parentNode);
            }
        }


        void AddNode(TreeNode parentNode)
        {
            try
            {
                var directory = from dir in new DirectoryInfo(parentNode.Tag.ToString()).GetDirectories()
                                select dir;
                foreach (var item in directory)
                {
                    TreeNode subNode = new TreeNode(item.Name);
                    subNode.Tag = item.FullName;
                    parentNode.Nodes.Add(subNode);
                    var nextDirectory = from dir in new DirectoryInfo(subNode.Tag.ToString()).GetDirectories()
                                        select dir;
                    foreach (var item1 in nextDirectory)
                    {
                        TreeNode nextSubNode = new TreeNode(item1.Name);
                        nextSubNode.Tag = item1.FullName;
                        subNode.Nodes.Add(nextSubNode);
                    }
                }
            }
            catch { }
        }

        //展开添加两道节点操作即可
        private void treeView1_AfterExpand(object sender, TreeViewEventArgs e)
        {

            if (e.Node.Tag != null)
                AddNode(e.Node);
        }
    }
}

--------------------编程问答-------------------- 一般地说,如果只是做select,还是写成linq操作符而不是表达式更好

var array = from d in Environment.GetLogicalDrives()
                        where new DriveInfo(d).DriveType == DriveType.Fixed
                        select d;
等价
var array = Environment.GetLogicalDrives().Where(d => new DriveInfo(d).DriveType == DriveType.Fixed);
多简单。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,