如果得到一个基于目录返回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;
}
答案 0 :(得分:3)
看一下LINQ to 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>