2011-02-05 145 views
0

我試圖在IIS 6.0中編程創建虛擬目錄,並且在虛擬目錄位於嵌套文件夾時檢查虛擬目錄是否存在問題。在IIS 6.0的子目錄中創建虛擬目錄(編程)

所以,如果我有一個文件夾樹如:

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

當我抓住了這個網站的元數據庫的DirectoryEntry對象:

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

的DirectoryEntry對象(將其稱爲條目)將有兩個孩子,與

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

但entry.Children [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; 
}