0

ディレクトリに基づいてツリーノードを返すメソッドを取得した場合

 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;
        } 
4

1 に答える 1

3

LINQtoXMLを見てください。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>
于 2012-10-16T15:19:36.357 に答える