IIS目录操作类
View Code
1 using System; 2 using System.IO; 3 using System.Text; 4 using System.DirectoryServices; 5 using System.Collections; 6 7 namespace Mono.Web 8 { 9 /// <summary> 10 /// IIS 虚拟目录操作类 11 /// </summary> 12 /// <remarks> 13 /// <para>有关IIS的属性设置,请参考: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iissdk/html/bb9c0d25-d003-4ddd-8adb-8662de0a24ee.asp</para> 14 /// <para>虚拟目录名区分大小写。</para> 15 /// </remarks> 16 public class VirtualDirectory : IDisposable 17 { 18 DirectoryEntry rootEntry; 19 20 /// <summary> 21 /// 构造方法 22 /// </summary> 23 public VirtualDirectory() 24 { 25 rootEntry = new DirectoryEntry("IIS://localhost/W3SVC/1/root"); 26 } 27 28 /// <summary> 29 /// 构造方法 30 /// </summary> 31 /// <param name="path">路径(如: IIS://server1/W3SVC/1/root)</param> 32 /// <param name="username">用户名</param> 33 /// <param name="password">密码</param> 34 public VirtualDirectory(string path, string username, string password) 35 { 36 rootEntry = new DirectoryEntry(path, username, password); 37 } 38 39 /// <summary> 40 /// 释放资源 41 /// </summary> 42 public void Dispose() 43 { 44 rootEntry.Close(); 45 } 46 47 /// <summary> 48 /// 是否存在 49 /// </summary> 50 /// <param name="name">虚拟目录名</param> 51 /// <returns></returns> 52 public bool Exists(string name) 53 { 54 bool exited =false; 55 DirectoryEntries entries = rootEntry.Children; 56 foreach(DirectoryEntry entry in entries) 57 { 58 if(entry.Name == name) 59 exited = true; 60 } 61 62 return exited; 63 } 64 65 /// <summary> 66 /// 创建 67 /// </summary> 68 /// <param name="name">虚拟目录名</param> 69 /// <param name="path">对应物理路径</param> 70 /// <returns></returns> 71 public bool Create(string name, string path) 72 { 73 if (Exists(name)) return false; 74 75 DirectoryEntry newVirDir = rootEntry.Children.Add(name, "IIsWebVirtualDir"); 76 newVirDir.Invoke("AppCreate", true); 77 newVirDir.CommitChanges(); 78 rootEntry .CommitChanges(); 79 80 newVirDir.Properties["AnonymousPasswordSync"].Value = true; 81 newVirDir.Properties["Path"].Value= path; 82 newVirDir.CommitChanges(); 83 84 return true; 85 } 86 87 /// <summary> 88 /// 删除 89 /// </summary> 90 /// <param name="name">虚拟目录名</param> 91 /// <returns></returns> 92 public void Delete(string name) 93 { 94 if (!Exists(name)) return; 95 96 rootEntry .Invoke("Delete", "IIsVirtualDir", name); 97 rootEntry .CommitChanges(); 98 } 99 100 /// <summary> 101 /// 获取属性 102 /// </summary> 103 /// <param name="name">虚拟目录名</param> 104 /// <returns></returns> 105 /// <example> 106 /// VirtualDirectory vd = new VirtualDirectory(); 107 /// DirectoryEntry entry = vd.GetProperties("Temp1"); 108 /// foreach(string s in entry.Properties.PropertyNames) 109 /// { 110 /// Console.WriteLine("{0}:{1} ({2})", s, entry.Properties[s].Value, entry.Properties[s].Value.GetType()); 111 /// foreach (object o in entry.Properties[s]) 112 /// { 113 /// Console.WriteLine("\t{0}", o); 114 /// } 115 /// } 116 /// </example> 117 public DirectoryEntry GetProperties(string name) 118 { 119 if (Exists(name)) 120 return rootEntry.Children.Find(name, "IIsWebVirtualDir"); 121 else 122 return null; 123 } 124 125 /// <summary> 126 /// 获取属性 127 /// </summary> 128 /// <param name="name">虚拟目录名</param> 129 /// <param name="property">属性名</param> 130 /// <returns></returns> 131 public object GetProperty(string name, string property) 132 { 133 DirectoryEntry info = GetProperties(name); 134 return info != null ? info.Properties[property].Value : null; 135 } 136 137 /// <summary> 138 /// 设置属性 139 /// </summary> 140 /// <param name="name">虚拟目录名</param> 141 /// <param name="property">属性名</param> 142 /// <param name="value">值</param> 143 public void SetProperty(string name, string property, object value) 144 { 145 if (Exists(name)) 146 { 147 DirectoryEntry entry = rootEntry.Children.Find(name,"IIsWebVirtualDir"); 148 entry.Properties[property].Value = value; 149 entry.CommitChanges(); 150 } 151 } 152 153 /// <summary> 154 /// 设置默认文档 155 /// </summary> 156 /// <param name="name">虚拟目录名</param> 157 /// <param name="filename">文件名</param> 158 /// <example> 159 /// VirtualDirectory vd = new VirtualDirectory(); 160 /// vd.SetDefaultDoc("test", "default.aspx", "index.aspx"); 161 /// </example> 162 public void SetDefaultDoc(string name, params string[] filename) 163 { 164 StringBuilder sb = new StringBuilder(); 165 166 for(int i = 0; i < filename.Length; i++) 167 { 168 sb.Append(filename[i]); 169 if (i < filename.Length - 1) sb.Append(","); 170 } 171 172 SetProperty(name, "DefaultDoc", sb.ToString()); 173 } 174 175 /// <summary> 176 /// 添加应用程序映射 177 /// </summary> 178 /// <param name="name">虚拟目录名</param> 179 /// <param name="ext">扩展名</param> 180 /// <param name="app">应用程序路径</param> 181 /// <param name="method">动作(OPTIONS,GET,HEAD,POST,PUT,DELETE,TRACE 为空时表示全部动作。)</param> 182 /// <param name="script">脚本引擎</param> 183 /// <param name="checkExists">检查文件是否存在</param> 184 public void AddScriptMap(string name, string ext, string app, string method, bool script, bool checkExists) 185 { 186 if (!ext.StartsWith(".")) 187 ext = "." + ext; 188 ext = ext.ToLower(); 189 190 int id = 0; 191 if (script && checkExists) 192 id = 5; 193 else if (script) 194 id = 1; 195 else if (checkExists) 196 id = 4; 197 198 string map = 199 method != null && method.Trim().Length > 0 ? 200 string.Format("{0},{1},{2},{3}", ext, app, id, method) : 201 string.Format("{0},{1},{2}", ext, app, id); 202 203 ArrayList maps = new ArrayList((object[])GetProperty(name, "ScriptMaps")); 204 205 // Delete, if it's exists. 206 string ext2 = ext + ","; 207 for (int i = 0; i < maps.Count; i++) 208 { 209 if (((string)maps[i]).ToLower().StartsWith(ext)) 210 { 211 maps.RemoveAt(i); 212 break; 213 } 214 } 215 216 // Append 217 maps.Add(map); 218 SetProperty(name, "ScriptMaps", maps.ToArray(typeof(object))); 219 } 220 221 /// <summary> 222 /// 删除应用程序映射 223 /// </summary> 224 /// <param name="name">虚拟目录名</param> 225 /// <param name="ext">扩展名</param> 226 public void DeleteScriptMap(string name, string ext) 227 { 228 if (!ext.StartsWith(".")) 229 ext = "." + ext; 230 ext = ext.ToLower(); 231 232 ArrayList maps = new ArrayList((object[])GetProperty(name, "ScriptMaps")); 233 234 string ext2 = ext + ","; 235 for (int i = 0; i < maps.Count; i++) 236 { 237 if (((string)maps[i]).ToLower().StartsWith(ext)) 238 { 239 maps.RemoveAt(i); 240 241 SetProperty(name, "ScriptMaps", maps.ToArray(typeof(object))); 242 return; 243 } 244 } 245 } 246 247 /// <summary> 248 /// 允许写入 249 /// </summary> 250 /// <param name="name">虚拟目录名</param> 251 public void EnabledAccessWrite(string name) 252 { 253 SetProperty(name, "AccessFlags", (int)GetProperty(name, "AccessFlags") | 0x00000002); 254 } 255 256 /// <summary> 257 /// 允许目录浏览 258 /// </summary> 259 /// <param name="name">虚拟目录名</param> 260 public void EnabledDirBrowse(string name) 261 { 262 SetProperty(name, "DirBrowseFlags", (int)GetProperty(name, "DirBrowseFlags") | 0x80000000); 263 } 264 265 /// <summary> 266 /// 设置路径 267 /// </summary> 268 /// <param name="name">虚拟目录名</param> 269 /// <param name="path">物理路径</param> 270 public void SetPath(string name, string path) 271 { 272 SetProperty(name, "Path", path); 273 } 274 275 /// <summary> 276 /// 设置会话超时 277 /// </summary> 278 /// <param name="name">虚拟目录名</param> 279 /// <param name="path">超时时间(分钟)</param> 280 public void SetSessionTimeout(string name, int timeout) 281 { 282 SetProperty(name, "AspSessionTimeout", timeout); 283 } 284 285 /// <summary> 286 /// 设置脚本超时 287 /// </summary> 288 /// <param name="name">虚拟目录名</param> 289 /// <param name="path">超时时间(秒)</param> 290 public void SetScriptTimeout(string name, int timeout) 291 { 292 SetProperty(name, "AspScriptTimeout", timeout); 293 } 294 } 295 }
本文来自博客园,作者:青空feng,转载请注明原文链接:https://www.cnblogs.com/hduwbf/archive/2013/03/23/2977827.html
关注公众号「小工具代码」,回复关键词「书单」获取程序员经典书单,大厂面试题大全。