【发布时间】:2015-03-29 12:21:41
【问题描述】:
如何递归地从文件夹中获取所有文件夹和文件树?我需要将这棵树放入 DataTable 并从中形成一个 treeView。我在形成递归方法方面有点问题,现在我只有一个不能正常工作的草稿:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace SWPF
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private int id, parentID;
private List<TREE> tree;
public MainWindow()
{
InitializeComponent();
tree = new List<TREE>();
id = 0;
parentID = 0;
fill(@"D:\c#");
}
private List<TREE> fill(string path)
{
DirectoryInfo dir = new DirectoryInfo(path);
foreach (DirectoryInfo folder in dir.GetDirectories())
{
tree.Add(new TREE(){ID = id++, ParentID = parentID++, Name = folder.Name, Type = "Folder"});
foreach (FileInfo file in folder.GetFiles())
{
tree.Add(new TREE() { ID = id, ParentID = parentID, Name = file.Name, Type = "File" });
}
var p = folder.GetDirectories();
if (p.Length > 0)
{
dir = folder;
fill(dir.FullName);
}
}
return tree;
}
}
public class TREE
{
public int ID { get; set; }
public int ParentID {get;set;}
public string Name {get;set;}
public string Type {get;set;}
}
}
拜托,你能告诉我形成树并将树放入 DataTable 的正确方法吗?列表很好,但我需要数据表。
我试过这个,但它不想正常工作:
public DataTable fill(DirectoryInfo dir)
{
DataTable dt = new DataTable("Tasks");
//dt.Columns.Add("ID");
dt.Columns.Add("ParentID");
dt.Columns.Add("Name");
dt.Columns.Add("Type");
foreach (var folder in dir.GetDirectories())
{
var row = dt.NewRow();
row["ParentID"] = folder.Parent;
row["Name"] = folder.Name;
row["Type"] = "dir";
dt.Rows.Add(row);
foreach (var file in folder.GetFiles())
{
var row2 = dt.NewRow();
row["ParentID"] = folder.Parent;
row["Name"] = file.Name;
row["Type"] = "file";
dt.Rows.Add(row2);
}
fill(folder);
}
return dt;
}
【问题讨论】:
-
social.msdn.microsoft.com/Forums/vstudio/en-US/… 展示了一种方法并提供了替代方法的链接。
-
另一种选择是构建 Xml 层次结构。参考 - stackoverflow.com/questions/15096397/… ,并使用数据表的 ReadXml 方法。
-
DataTable序列化完美,需要通过WCF服务发送
标签: c# recursion datatable tree treeview