Hi... I'm new to programming, and trying to learn C#, so please be very explicit when replying. I'm trying to build an TreeView Explorer app that will list directories and files anywhere on my computer. The code below works great when listing directories and files on a CDROM Drive, but when I change the path to:
DirectoryInfo info = new DirectoryInfo(@"d:");

I get this exception:
"An unhandled exception of type 'System.UnauthorizedAccessException' occurred in mscorlib.dll
Additional information: Access to the path 'D:\System Volume Information' is denied."

The program breaks on this line:
subSubDirs = subDir.GetDirectories();

I've searched everywhere, and even found a solution suggesting to wrap my code in a Try catch block, but I don't understand how to do this. Would be so grateful if someone could explain the solution and show how to implement it. Thanks much...

Here's the code:

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

namespace WindowsFormsApplication3
{
public partial class Form1 : Form
{

public Form1()
{
InitializeComponent();
PopulateTreeView();
}


private void PopulateTreeView()

{
TreeNode rootNode;

DirectoryInfo info = new DirectoryInfo(@"d:");
if (info.Exists)
{
rootNode = new TreeNode(info.Name);
rootNode.Tag = info;
GetDirectories(info.GetDirectories(), rootNode);
treeView1.Nodes.Add(rootNode);
}
}

private void GetDirectories(DirectoryInfo[] subDirs,
TreeNode nodeToAddTo)
{
TreeNode aNode;
DirectoryInfo[] subSubDirs;
foreach (DirectoryInfo subDir in subDirs)
{
aNode = new TreeNode(subDir.Name, 0, 0);
aNode.Tag = subDir;
aNode.ImageKey = "folder";
subSubDirs = subDir.GetDirectories();
if (subSubDirs.Length != 0)
{
GetDirectories(subSubDirs, aNode);
}

nodeToAddTo.Nodes.Add(aNode);
}

}

void treeView1_NodeMouseClick(object sender,
TreeNodeMouseClickEventArgs e)
{
TreeNode newSelected = e.Node;
listView1.Items.Clear();
DirectoryInfo nodeDirInfo = (DirectoryInfo)newSelected.Tag;
ListViewItem.ListViewSubItem[] subItems;
ListViewItem item = null;

foreach (DirectoryInfo dir in nodeDirInfo.GetDirectories())
{
item = new ListViewItem(dir.Name, 0);
subItems = new ListViewItem.ListViewSubItem[]
{new ListViewItem.ListViewSubItem(item, "Directory"),
new ListViewItem.ListViewSubItem(item,
dir.LastAccessTime.ToShortDateString())};
item.SubItems.AddRange(subItems);
listView1.Items.Add(item);
}
foreach (FileInfo file in nodeDirInfo.GetFiles())
{
item = new ListViewItem(file.Name, 1);
subItems = new ListViewItem.ListViewSubItem[]
{ new ListViewItem.ListViewSubItem(item, "File"),
new ListViewItem.ListViewSubItem(item,
file.LastAccessTime.ToShortDateString())};

item.SubItems.AddRange(subItems);
listView1.Items.Add(item);
}

listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
}

[STAThread]
static void Main()
{
Application.Run(new Form1());
}

private void toolStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{

}

}
}