C#Linq到XML检查目录是否存在

时间:2017-06-26 10:50:20

标签: c# xml linq

我有以下XML文件布局:

<TopNode>
  <AppRun Date="26-Jun-17 02:15">
    <Folder Name="Folder1">
      <SubFolder Name="SubFolder1" />
      <SubFolder Name="SubFolder2" />
    </Folder>
    <Folder Name="Folder2">
      <SubFolder Name="SubFolder1" />
      <SubFolder Name="SubFolder2" />
    </Folder>
  </AppRun>
</TopNode>

以下frankencode我一起捣碎:

        TopNode.Add(new XElement("AppRun",
            new XAttribute("Date", DateTime.Now.ToString("dd-MMM-yy hh:mm")),
            _folderNameArray.Select(x => new XElement("Folder", new XAttribute("Name", x),
                Directory.GetDirectories(Path.Combine(_sourceDirectory, x), "*", SearchOption.TopDirectoryOnly).
                                             Select(y => new XElement("SubFolder", new XAttribute("Name", Path.GetFileNameWithoutExtension(y))))))));

所以我在数组中有文件夹元素名称,因为它们保持不变;但是,文件夹可能并不总是存在。因此,当应用程序尝试执行目录时,它将抛出DirectoryNotFound异常。我想在xml中保留一个空文件夹元素,即使该目录不存在。

在尝试探测目录之前,有人能指出我正确的方向来编辑这段代码以检查目录是否存在。

1 个答案:

答案 0 :(得分:0)

这将获取您文件夹列表中的所有子文件夹

var mainFolder = "C:\\";
            var folders = new []{ "Test" , "ABCFG" };

            var data = new XElement("AppRun", 
                       from folderName in folders
                       let path = Path.Combine(mainFolder,folderName)
                       select new XElement("Folder", 
                           new XAttribute("Name",folderName), 
                           Directory.Exists(path) ? from subDir in  Directory.GetDirectories(path, "*", SearchOption.TopDirectoryOnly)
                                                    select new XElement("SubFolder",new XAttribute("Name", Path.GetFileNameWithoutExtension(subDir))): null));

            Console.WriteLine(data.ToString());