用c#创建表示文件夹结构(包括子文件夹)的XML文件

本文关键字:文件夹 文件 XML 包括 创建 表示 结构 | 更新日期: 2023-09-27 18:01:19

如何生成一个XML文件来构造一个给定的文件夹来递归地表示所有的文件&其中的子文件夹?

用c#创建表示文件夹结构(包括子文件夹)的XML文件

这是一个很好的例子,可以很容易地用递归算法解决!

伪代码:

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/XDocument/XElement类来完成:

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();
}

我的笔记本电脑上的一个目录的输出:

<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>

要知道你的问题是什么有点困难。

你需要使用DirectoryInfo。GetFiles和DirectoryInfo。GetDirectories获取文件和文件夹列表,使用递归循环。然后使用Xml。