如果有一种基于目录返回treeNode的方法
private static TreeNode GetDirectoryNodes(string path)
{
var dir = new DirectoryInfo(path);
var node = new TreeNode(dir.Name);
foreach (var directory in dir.GetDirectories())
{
node.Nodes.Add(GetDirectoryNodes(path + "\" + directory.ToString()));
}
return node;
}
但是,我需要创建目录插座的XML DOM,但是我是XML DOM的新手,无法弄清楚如何做到这一点。我看到的问题是:如何将进入XML;以及如何获得子目录这是我到目前为止所拥有的
private static XmlDocument GetDirTreeData(string path)
{
var dir = new DirectoryInfo(path);
XmlDocument XMLDOM = new XmlDocument();
XmlElement xl = XMLDOM.CreateElement(path);
foreach (var directory in dir.GetDirectories())
{
xl.InnerXml = directory.ToString();
}
return XMLDOM;
}
看一下linq到xml。使用LINQ完成任务更容易。这是有效的代码,但无法处理拒绝访问和类似问题
static void Main(string[] args)
{
XDocument xdoc = new XDocument(
new XElement("Root",
DirToXml(new DirectoryInfo("C:\MyFolder"))));
}
private static XElement DirToXml(DirectoryInfo dir)
{
return new XElement("Directory",
new XAttribute("Name", dir.Name),
dir.GetDirectories().Select(d => DirToXml(d)));
}
XDOC变量是您的XML文档。dirtoxml是递归方法,它可以找到所有子目录并为它们创建元素。
结果看起来像这样:
<Root>
<Directory Name=".history">
<Directory Name="0" />
<Directory Name="1" />
<Directory Name="10" />
<Directory Name="11" />
<Directory Name="12" />
<Directory Name="13" />
<Directory Name="14" />
<Directory Name="15" />
<Directory Name="16" />
</Directory>
</Root>