2017-06-26 10 views
0

長時間リーダー、初めてのポスター。ディレクトリが存在する場合の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

ラップDirectory.GetDirectories()あなたのすべてのサブフォルダを取得し、代わりにそれを呼び出します、あなたが作ることができますDirectory.Exists()テストが失敗した場合、好きなものを返します。 –

答えて

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()); 
+0

ありがとうございました!私の環境のためにそれを微調整しなければならなかったが、広告されたように働く!御時間ありがとうございます ;-) – Terry

関連する問題