2011-02-05 20 views
0

IIS 6.0で仮想ディレクトリをプログラムで作成しようとしていますが、仮想ディレクトリがネストされたフォルダにある場合に仮想ディレクトリが存在するかどうかを確認する際に問題があります。IIS 6.0でサブディレクトリに仮想ディレクトリを作成する(プログラムで)

私のようなフォルダツリーを持っているのであれば:私はこのサイトのメタベースのためのDirectoryEntryオブジェクトをつかむとき

MySite 
    Folder A (virtual directory) 
    Folder B 
     NestedFolder C (virtual directory) 

"IIS://<servername>/W3SVC/2/Root" 

DirectoryEntryオブジェクトは、(エントリそれを呼びます)があります2人の子供が

entry.Children[0].Name = "Folder A" 

と入力していますが、児童[1] .Name = "フォルダB"は仮想ディレクトリ。入れ子になったフォルダ内の任意の仮想ディレクトリに移動するには、次のコードを実行する必要があります。

foreach (var directoryEntry in entry.Children.Cast<DirectoryEntry>().Where(directoryEntry => directoryEntry.SchemaClassName == "IIsWebVirtualDir" || directoryEntry.SchemaClassName == "IIsWebDirectory")) { 
      foreach (DirectoryEntry child in directoryEntry.Children.Cast<DirectoryEntry>().Where(subChild => subChild.SchemaClassName == "IIsWebVirtualDir")) { 
       if (child.Name == vDir) 
        return true; 
      } 

      if (directoryEntry.Name != vDir) continue; 
      return true; 
     } 

私はかなり醜いです。既存の仮想ディレクトリがサブフォルダに存在するかどうかを確認できる優れた方法はありますか?

おかげで、

答えて

1

あなたはサイト全体を反復する再帰関数をお探しですか?

public static void Main() { 
    var siteRoot = new DirectoryEntry("IIS://<servername>/W3SVC/2/Root"); 
    var containsVirtualDirectory = ContainsVirtualDirectory(siteRoot); 
} 

private static Boolean ContainsVirtualDirectory(DirectoryEntry container) { 
    foreach (DirectoryEntry child in container.Children) { 
     if (child.SchemaClassName == "IIsWebVirtualDir") 
      return true; 

     if (child.SchemaClassName == "IIsWebDirectory" && ContainsVirtualDirectory(child)) 
      return true; 
    } 

    return false; 
} 
関連する問題