/// <summary>释放文件夹</summary> /// <param name="asm"></param> /// <param name="prefix"></param> /// <param name="dest"></param> /// <param name="overWrite"></param> /// <param name="filenameResolver"></param> public static void ReleaseFolder(this Assembly asm, String prefix, String dest, Boolean overWrite = false, Func <String, String> filenameResolver = null) { if (asm == null) { asm = Assembly.GetCallingAssembly(); } // 找到符合条件的资源 var names = asm.GetManifestResourceNames(); if (names == null || names.Length < 1) { return; } IEnumerable <String> ns = null; if (prefix.IsNullOrWhiteSpace()) { ns = names.AsEnumerable(); } else { ns = names.Where(e => e.StartsWithIgnoreCase(prefix)); } if (String.IsNullOrEmpty(dest)) { dest = ".".GetFullPath(); } dest = dest.GetFullPath(); // 开始处理 foreach (var item in ns) { var stream = asm.GetManifestResourceStream(item); // 计算filename String filename = null; // 去掉前缀 if (filenameResolver != null) { filename = filenameResolver(item); } if (String.IsNullOrEmpty(filename)) { filename = item; if (!String.IsNullOrEmpty(prefix)) { filename = filename.Substring(prefix.Length); } if (filename[0] == '.') { filename = filename.Substring(1); } var ext = Path.GetExtension(item); filename = filename.Substring(0, filename.Length - ext.Length); filename = filename.Replace(".", @"\") + ext; filename = Path.Combine(dest, filename); } if (File.Exists(filename) && !overWrite) { return; } //var path = Path.GetDirectoryName(filename); //if (!path.IsNullOrWhiteSpace() && !Directory.Exists(path)) Directory.CreateDirectory(path); filename.EnsureDirectory(true); try { if (File.Exists(filename)) { File.Delete(filename); } using var fs = File.Create(filename); IOHelper.CopyTo(stream, fs); } catch { } finally { stream.Dispose(); } } }