4

C#でフォルダーツリーをたどり、見つけたものをなんとかして記録し、それを文字列としてネットワーク上の別のデバイスに渡して、グラフィカルに表示する必要があります。

フォルダーツリーのウォークは、文字列を渡すのと同様に、再帰を使用して簡単に実行できます。

ただし、文字列の形式をできるだけ移植しやすくしたいので、XMLを考えました。どういうわけかXMLを文字列にシリアル化できると思います。

私はXMLに非常に慣れていないので、どのように進めるのが最善かわかりません。フォーマットは次の例のようになるはずだと思います。

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

何か案は?私が見た例のように、LinqToXMLを使用してXElementオブジェクトから文字列を構築しますか、それともそれが最善の方法ではありませんか?

4

2 に答える 2

2

さて、私はXElementを進めました-チャックサベージが言ったのと同じくらい簡単であることがわかりました:)

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 に答える
2

一日の終わりに解析しています。指定された区切り文字を持つ任意の形式で十分です。

Folder/Folder/Folder/Folder/Blah.txt

上記は、XML のオーバーヘッドよりもはるかに簡潔であり、移植性のニーズも満たしているはずです。

于 2012-06-07T16:27:56.233 に答える