Reputation: 81
i want to access computer directory for which im uing folder browser and then the value of path selected shold be used to show treeeview .can anyone tell me what arguments to use when calling method of LISTDIRECTORY in button click.further i dont know what im doing wrong plz help
private void button2_Click(object sender, EventArgs e)
{
tView.Nodes.Clear();
if (folderBrowser.ShowDialog() == DialogResult.OK)
{
string[] folders = Directory.GetDirectories(folderBrowser.SelectedPath);
foreach (string path in folders)
{
ListDirectory(tView.Nodes,file.Name);
}
}
}
private static void ListDirectory(TreeView treeView,string path)
{
var stack = new Stack<TreeNode>();
var rootDirectory = new DirectoryInfo(path);
var node = new TreeNode(rootDirectory.Name) { Tag = rootDirectory };
stack.Push(node);
while (stack.Count > 0)
{
var currentNode = stack.Pop();
var directoryInfo = (DirectoryInfo)currentNode.Tag;
foreach (var directory in directoryInfo.GetDirectories())
{
var childDirectoryNode = new TreeNode(directory.Name) { Tag = directory };
currentNode.Nodes.Add(childDirectoryNode);
stack.Push(childDirectoryNode);
}
foreach (var file in directoryInfo.GetFiles())
currentNode.Nodes.Add(new TreeNode(file.Name));
}
tView.Nodes.Add(node);
}
}
}
Upvotes: 0
Views: 3254
Reputation: 9862
Use following code instead of your code:
private void button2_Click(object sender, EventArgs e)
{
if (folderBrowser.ShowDialog() == DialogResult.OK)
{
string strSearchPath=folderBrowserDialog1.SelectedPath;
GetTree(strSearchPath);
}
}
void GetTree(string strSearchPath)
{
tView.Nodes.Clear();
SetNode(tView, strSearchPath);
tView.TopNode.Expand();
}
void SetNode(TreeView treeName, string path)
{
DirectoryInfo dirInfo = new DirectoryInfo(path);
TreeNode node = new TreeNode(dirInfo.Name);
node.Tag = dirInfo;
GetFolders(dirInfo, node);
GetFiles(dirInfo, node);
treeName.Nodes.Add(node);
}
void GetFolders(DirectoryInfo d, TreeNode node)
{
try
{
DirectoryInfo[] dInfo = d.GetDirectories();
if (dInfo.Length > 0)
{
TreeNode treeNode = new TreeNode();
foreach (DirectoryInfo driSub in dInfo)
{
treeNode = node.Nodes.Add(driSub.Name, driSub.Name, 0, 0);
GetFiles(driSub, treeNode);
GetFolders(driSub, treeNode);
}
}
}
catch (Exception ex) { }
}
void GetFiles(DirectoryInfo d, TreeNode node)
{
//if you want to search .doc or docx file then:
// var files = d.GetFiles("*.doc*");
var files = d.GetFiles("*.*");
FileInfo[] subfileInfo = files.ToArray<FileInfo>();
if (subfileInfo.Length > 0)
{
for (int j = 0; j < subfileInfo.Length; j++)
{
//Checking for Hiddend files
bool isHidden = ((File.GetAttributes(subfileInfo[j].FullName) & FileAttributes.Hidden) == FileAttributes.Hidden);
if (!isHidden)
{
TreeNode treeNode = new TreeNode();
string path = subfileInfo[j].FullName;
string name = subfileInfo[j].Name;
treeNode = node.Nodes.Add(path, name);
}
}
}
}
Hope this helps you :)
Upvotes: 2
Reputation: 106
Or you have to pass a TreeView instead of TreeView.Nodes. Or you can change to parameter type to Nodes, so you can pass nodes instead of the whole treeview.
ListDirectory(**tView.Nodes**,file.Name);
}
}
}
private static void ListDirectory(**TreeView treeView**,string path)
{
HTH, John
Upvotes: 0