1

特定のフォルダーを構造化する XML ファイルを生成して、その中のすべてのファイルとサブフォルダーを再帰的に表すにはどうすればよいですか?

4

2 に答える 2

10

これは、再帰アルゴリズムを使用して簡単に解決できる問題の好例です。

擬似コード:

function GetDirectoryXml(path)
    xml := "<dir name='" + path + "'>"

    dirInfo := GetDirectoryInfo(path)
    for each file in dirInfo.Files
        xml += "<file name='" + file.Name + "' />"
    end for

    for each subDir in dirInfo.Directories
        xml += GetDirectoryXml(subDir.Path)
    end for

    xml += "</dir>"

    return xml
end function

次のような C#およびDirectoryInfo//クラスで実行できます。XDocumentXElement

public static XElement GetDirectoryXml(DirectoryInfo dir)
{
    var info = new XElement("dir",
                   new XAttribute("name", dir.Name));

    foreach (var file in dir.GetFiles())
        info.Add(new XElement("file",
                     new XAttribute("name", file.Name)));

    foreach (var subDir in dir.GetDirectories())
        info.Add(GetDirectoryXml(subDir));

    return info;
}

そして使用例:

static void Main(string[] args)
{
    string rootPath = Console.ReadLine();
    var dir = new DirectoryInfo(rootPath);

    var doc = new XDocument(GetDirectoryXml(dir));

    Console.WriteLine(doc.ToString());

    Console.Read();
}

私のラップトップのディレクトリの1つの出力:

<dir name="eBooks">
  <file name="Edulinq.pdf" />
  <file name="MCTS 70-516 Accessing Data with Microsoft NET Framework 4.pdf" />
  <dir name="Silverlight">
    <file name="Sams - Silverlight 4 Unleashed.pdf" />
    <file name="Silverlight 2 Unleashed.pdf" />
    <file name="WhatsNewInSilverlight4.pdf" />
  </dir>
  <dir name="Windows Phone">
    <file name="11180349_Building_Windows_Phone_Apps_-_A_Developers_Guide_v7_NoCover (1).pdf" />
    <file name="Programming Windows Phone 7.pdf" />
  </dir>
  <dir name="WPF">
    <file name="Building Enterprise Applications with WPF and the MVVM Pattern (pdf).pdf" />
    <file name="Prism4.pdf" />
    <file name="WPF Binding CheatSheet.pdf" />
  </dir>
</dir>
于 2013-02-26T18:37:21.977 に答える
1

あなたが抱えている問題が何であるかを知るのは少し難しいです。

DirectoryInfo.GetFilesDirectoryInfo.GetDirectoriesを使用して、ファイルとフォルダーのリストを取得し、再帰的にループする必要があります。次に、Xml.XmlDocumentを使用してxmlドキュメントを記述します。

于 2013-02-26T18:25:09.703 に答える