4

我需要在 C# 中遍历文件夹树并以某种方式记录我找到的内容,然后将其作为字符串传递给我网络上的另一个设备,在那里我将以图形方式显示它。

使用递归遍历文件夹树很简单,传递字符串也是如此。

但是我希望字符串的格式尽可能便携,所以我想到了 XML。我猜我可以以某种方式将 XML 序列化为字符串。

我对 XML 很陌生,所以我不确定如何最好地进行。我在想格式应该像这个例子一样结束:

<Tree>
  <Folder Name="Folder1">
    <File Name="File1" />
  </Folder>
</Tree>

有任何想法吗?我是否使用 LinqToXML 从 XElement 对象中构建字符串,就像我见过的示例一样,或者这不是最好的方法?

4

2 回答 2

2

它在一天结束时进行解析;具有给定分隔符的任何格式都应该足够了。

Folder/Folder/Folder/Folder/Blah.txt

上面应该比 XML 的开销要简洁得多,也可以满足您的可移植性需求。

于 2012-06-07T16:27:56.233 回答
2

好的,所以我继续使用 XElement - 结果就像 Chuck Savage 说的那样简单:)

private void BuildFolderTree(DirectoryInfo parentFolder, XElement parentElement)
{
    // Find all the subfolders under this folder.
    foreach (DirectoryInfo folderInfo in parentFolder.GetDirectories())
    {
        // Add this folder to the doc.
        XElement folderElement = new XElement("Folder", new XAttribute("Name", folderInfo.Name), new XAttribute("Path", folderInfo.FullName));
                parentElement.Add(folderElement);

        // Recurse into this folder.
        BuildFolderTree(folderInfo, folderElement);
    }

    // Process all the files in this folder
    foreach (FileInfo fileInfo in parentFolder.GetFiles("*.*"))
    {
        // Add this file minus its extension.
        parentElement.Add(new XElement(STR_File, new XAttribute("Name", fileInfo.Name), new XAttribute("Path", fileInfo.FullName)));
    }
}

// main code
DriveInfo di = new DriveInfo("M");
XElement usbKeyTreeElement = new XElement("USBKey");
BuildFolderTree(di.RootDirectory, usbKeyTreeElement);
string usbKeyString = usbKeyTreeElement.ToString();

usbKeyString 最终看起来像这样:

<USBKey>
  <Folder Name="folder1" Path="M:\folder1" />
  <Folder Name="folder2" Path="M:\folder2">
    <File Name="file1" Path="M:\folder2\file1.txt" />
    <File Name="file2" Path="M:\folder2\file2.txt" />
  </Folder>
</USBKey>
于 2012-06-08T09:43:15.257 回答