using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; using System.Windows.Forms; namespace Directories { class ListViewItemComparer : IComparer { private int col; public ListViewItemComparer() { col = 0; } public ListViewItemComparer(int column) { col = column; } public int Compare(object x, object y) { ListViewItem a = (ListViewItem) x; ListViewItem b = (ListViewItem) y; return String.Compare (a.SubItems [col].Text, b.SubItems[col].Text); } } } using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; namespace Directories { public partial class Window : Form { public Window() { InitializeComponent(); treeView1.ShowNodeToolTips = true; initTree (); } private void initTree () { // var drives = DriveInfo.GetDrives (); // foreach (var d in drives) DriveInfo [] drives = DriveInfo.GetDrives (); foreach (DriveInfo d in drives) { showBranch (treeView1.Nodes, d.RootDirectory.FullName); } } MyNode showDirectory (TreeNodeCollection target, string path, string name) { MyNode node = new MyNode(); node.Text = name; node.path = path; node.ready = false; node.ToolTipText = path; target.Add (node); return node; } void showSubdirs (MyNode node, DirectoryInfo dir) { try { DirectoryInfo[] subdirs = dir.GetDirectories(); foreach (DirectoryInfo d in subdirs) showDirectory(node.Nodes, d.FullName, d.Name); node.ready = true; } catch (Exception e) { node.ForeColor = Color.Red; node.ToolTipText = node.ToolTipText + " : " + e.Message; } } void showBranch (TreeNodeCollection target, string path) { DirectoryInfo dir = new DirectoryInfo (path); MyNode node = showDirectory (target, dir.FullName, dir.Name); showSubdirs (node, dir); } private void treeView1_BeforeExpand (object sender, TreeViewCancelEventArgs e) { foreach (TreeNode n in e.Node.Nodes) { MyNode node = n as MyNode; if (node != null && ! node.ready) { DirectoryInfo dir = new DirectoryInfo (node.path); showSubdirs (node, dir); } } } private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { MyNode node = e.Node as MyNode; if (node != null) showFiles (node.path); } private void showFiles (string path) { listView1.Items.Clear (); listView1.ShowItemToolTips = true; try { DirectoryInfo dir = new DirectoryInfo (path); statusLabel.Text = dir.FullName; FileInfo[] files = dir.GetFiles(); int cnt = 0; foreach (FileInfo f in files) { MyItem item = new MyItem(); item.Text = f.Name; item.ToolTipText = f.FullName; item.path = f.FullName; //item.ImageIndex = cnt % imageList2.Images.Count; cnt++; item.SubItems.Add(f.Length.ToString("### ### ### ##0")); item.SubItems.Add(f.LastWriteTime.ToString("yyyy-MM-dd HH:mm")); listView1.Items.Add (item); // statusLabel.Text += ", " + f.Name; } } catch (Exception e) { ListViewItem item = new ListViewItem(); item.Text = e.Message; listView1.Items.Add (item); } } private void listView1_ColumnClick(object sender, ColumnClickEventArgs e) { listView1.ListViewItemSorter = new ListViewItemComparer (e.Column); // e.Column. } private void listView1_DoubleClick(object sender, EventArgs e) { if (listView1.SelectedItems.Count == 1) { ListViewItem t = listView1.SelectedItems [0]; MyItem item = t as MyItem; if (item != null) showOneFile (item.path); } } private void showOneFile (String path) { try { FileInfo f = new FileInfo (path); string ext = f.Extension; if (ext == ".bmp" || ext == ".jpeg" || ext == ".jpg") { pictureBox1.Image = new Bitmap (f.FullName); tabControl1.SelectedTab = imagePage; } } catch (Exception e) { } } } }