using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Files
{
public class Node : TreeNode
{
public Data data;
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel;
namespace Files
{
public class Data
{
[ Category ("Basic") ]
public string Name { get; set; }
[ Category("Basic")]
[ DisplayName ("Full path")]
public string Path { get; set; }
[Category("Basic")]
[ Description ("File size in bytes")]
public long Size { get; set; }
[Category("Basic")]
[ Description("Last write time in UTC")]
public DateTime Time { get; set; }
[ Browsable (false) ]
public bool Directory { get; set; }
public bool Ready { get; set; }
}
}
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 Files
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// using System.IO;
treeView1.ShowNodeToolTips = true;
DriveInfo[] disks = DriveInfo.GetDrives ();
foreach (var disk in disks)
{
Display (treeView1.Nodes, disk.RootDirectory, 2);
}
}
private void Display (TreeNodeCollection branch,
DirectoryInfo dir,
int level)
{
var node = new Node();
node.Text = dir.Name;
node.ToolTipText = dir.FullName;
node.data = new Data();
node.data.Name = dir.Name;
node.data.Path = dir.FullName;
node.data.Time = dir.LastWriteTimeUtc;
node.data.Directory = true;
branch.Add (node);
if (level > 1)
DisplaySubdir (node, dir, level-1);
}
private void DisplaySubdir (Node target,
DirectoryInfo dir,
int level)
{
try
{
foreach (var subdir in dir.GetDirectories())
Display (target.Nodes, subdir, level - 1);
foreach (var file in dir.GetFiles())
DisplayFile (target.Nodes, file);
target.data.Ready = true;
}
catch (Exception ex)
{
var info = new TreeNode();
info.Text = ex.Message;
info.ToolTipText = ex.StackTrace;
info.ForeColor = Color.Red;
target.Nodes.Add(info);
}
}
private void DisplayFile (TreeNodeCollection branch,
FileInfo file)
{
var node = new Node();
node.Text = file.Name;
node.ToolTipText = file.FullName;
node.data = new Data();
node.data.Name = file.Name;
node.data.Path = file.FullName;
node.data.Size = file.Length;
node.data.Time = file.LastWriteTimeUtc;
branch.Add(node);
}
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
if (e.Node is Node)
{
var data = (e.Node as Node).data;
propertyGrid1.SelectedObject = data;
}
else
{
propertyGrid1.SelectedObject = null;
}
}
private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)
{
foreach (TreeNode t in e.Node.Nodes)
if (t is Node)
{
Node n = t as Node;
if (n.data.Directory && ! n.data.Ready)
DisplaySubdir (n, new DirectoryInfo(n.data.Path), 2);
}
}
private void quitToolStripMenuItem_Click(object sender, EventArgs e)
{
Close();
}
}
}