我正在使用 c# 填充“文件资源管理器”解决方案。这是我的代码:
namespace NIXplorer
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
TreeNode root = new TreeNode("Desktop");
TreeNode doc = new TreeNode("My Documents");
TreeNode comp = new TreeNode("My Computer ");
TreeNode drivenode;
TreeNode filenode;
DirectoryInfo dir;
string path = "";
private void Form1_Load(object sender, EventArgs e)
{
listView1.LabelEdit = true;
listView1.FullRowSelect = true;
listView1.Sorting = SortOrder.Ascending;
treeView1.Nodes.Add(root);
root.ImageIndex = 0;
doc.ImageIndex = 1;
comp.ImageIndex = 2;
treeView1.Nodes.Add(doc);
treeView1.Nodes.Add(comp);
GetDrives();
}
private void GetDrives()
{
DriveInfo[] drive = DriveInfo.GetDrives();
foreach (DriveInfo d in drive)
{
drivenode = new TreeNode(d.Name);
dir = d.RootDirectory;
comp.Nodes.Add(drivenode);
//drivenode.ImageIndex = 3;
switch (d.DriveType)
{
case DriveType.CDRom:
drivenode.ImageIndex = 5;
break;
//case DriveType.Fixed:
// drivenode.ImageIndex = 1;
// break;
case DriveType.Removable:
drivenode.ImageIndex = 8;
break;
//case DriveType.NoRootDirectory:
// drivenode.ImageIndex = 5;
// break;
case DriveType.Network:
drivenode.ImageIndex = 6;
break;
default:
drivenode.ImageIndex = 7;
break;
}
getFilesAndDir(drivenode, dir);
}
}
private void getFilesAndDir(TreeNode node, DirectoryInfo dirname)
{
try
{
foreach (FileInfo fi in dirname.GetFiles())
{
filenode = new TreeNode(fi.Name);
filenode.Name = fi.FullName;
//filenode.ImageIndex = 5;
getFileExtension(filenode.Name);
node.Nodes.Add(filenode);
}
try
{
foreach (DirectoryInfo di in dirname.GetDirectories())
{
TreeNode dirnode = new TreeNode(di.Name);
dirnode.ImageIndex = 4;
dirnode.Name = di.FullName;
node.Nodes.Add(dirnode);
getFilesAndDir(dirnode, di); //Recursive Functioning
}
}
catch (Exception e1)
{
}
}
catch (Exception e1)
{
}
}
private void getFileExtension(string filename)
{
switch (Path.GetExtension(filename))
{
case ".txt":
filenode.ImageIndex = 17;
break;
case ".rtf":
filenode.ImageIndex = 16;
break;
case ".doc":
case ".docx":
filenode.ImageIndex = 9;
break;
case ".html":
case ".htm":
filenode.ImageIndex = 13;
break;
case ".rar":
case ".zip":
filenode.ImageIndex = 10;
break;
case ".exe":
filenode.ImageIndex = 12;
break;
case ".mp3":
case ".wma":
case ".flac":
case ".m4a":
filenode.ImageIndex = 11;
break;
case ".mp4":
case ".flv":
case ".mkv":
case ".webm":
filenode.ImageIndex = 18;
break;
case ".ico":
case ".png":
case ".jpg":
case ".jpeg":
case ".psd":
filenode.ImageIndex = 14;
break;
default:
filenode.ImageIndex = 15;
break;
}
}
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
try
{
listView1.Items.Clear();
TreeNode selectednode = e.Node;
treeView1.SelectedNode.ImageIndex = e.Node.ImageIndex;
selectednode.Expand();
comboBox1.Text = selectednode.FullPath;
if (selectednode.Nodes.Count > 0)
{
foreach (TreeNode n in selectednode.Nodes)
{
ListViewItem lst = new ListViewItem(n.Text, n.ImageIndex);
lst.Name = n.FullPath.Substring(13);
//MessageBox.Show("List Node : " + lst.Name);
listView1.Items.Add(lst);
}
}
else
{
listView1.Items.Add(selectednode.FullPath, selectednode.Text, selectednode.ImageIndex);
}
}
catch (Exception e1)
{
}
}
}
}
我在 VS2012 中构建了这个解决方案,这个算法似乎不是最好的选择,因为每次我调试这个解决方案时,启动需要超过 1 或 2 分钟......这真的很糟糕......希望你们能提供更好的帮助解决方案或算法?那简直太好了。提前致谢 !