上次看caozhy写了个linq的资源管理器,好屌。
我业余写了个,没分了只能发这里了。四不像版的,上了--------------------编程问答-------------------- 一般地说,如果只是做select,还是写成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);
}
}
}
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#