我需要在C#中走一个文件夹树并以某种方式记录我找到的内容,然后将其作为字符串传递给我网络上的另一台设备,我将以图形方式显示它。
使用递归操作文件夹树很简单,就像传递字符串一样。
但是我希望字符串的格式尽可能便携,所以我想到了XML。我猜我可以以某种方式将XML序列化为字符串。
我对XML很新,所以我不确定如何最好地继续。我认为格式应该像这样的例子:
<Tree>
<Folder Name="Folder1">
<File Name="File1" />
</Folder>
</Tree>
有什么想法吗?我是否使用LinqToXML从XElement对象构建字符串,就像我见过的一个例子,或者这不是最好的方法?
答案 0 :(得分:2)
它在一天结束时解析;具有给定分隔符的任何格式都应该足够了。
Folder/Folder/Folder/Folder/Blah.txt
上述内容应该比XML的开销更简洁,并且还可以满足您的可移植性需求。
答案 1 :(得分: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>