/// Get values of all public object fields and properties public static Vars PropsToVars(object o, IStringFilter filter) { Vars v = new Vars(); if (o != null) { Type t = o.GetType(); foreach (var p in t.GetProperties(BindingFlags.Instance | BindingFlags.Public)) { if (filter != null && !filter.IsMatch(p.Name)) { continue; } var ip = p.GetIndexParameters(); if (ip != null && ip.Length != 0) { continue; } if (!p.CanRead) { continue; } try { v[p.Name] = p.GetValue(o, null); } catch { } } foreach (var f in t.GetFields(BindingFlags.Instance | BindingFlags.Public)) { if (filter != null && !filter.IsMatch(f.Name)) { continue; } try { v[f.Name] = f.GetValue(o); } catch { } } } return(v); }
private object copy(DirectoryInfo rootFrom, DirectoryInfo fromDir, DirectoryInfo toDir, IStringFilter nf, IStringFilter df) { bool isRoot = (rootFrom == fromDir); bool isVisible = (isRoot || CheckHidden(fromDir)); bool processFiles = isVisible; if (processFiles && (df != null && !df.IsMatch(fromDir.FullName))) { processFiles = false; VerboseMessage("{0} did not pass directory filter", fromDir.FullName); } var from = new FileOrDirectoryInfo(fromDir); var to = new FileOrDirectoryInfo(toDir); return(ProcessPrepare(from, to, delegate { if (processFiles) { if (EmptyDirectories && !to.Exists) { bool created; object r = createDir(fromDir, toDir, out created); if (r != null || !created) { return r; } } foreach (FileInfo f in fromDir.GetFiles()) { FileInfo toFile = new FileInfo(Path.Combine(to.FullName, f.Name)); object r = copySingleFile(nf, f, toFile); if (r != null) { return r; } } } if (Recursive) { foreach (DirectoryInfo d in fromDir.GetDirectories()) { object r = copy(rootFrom, d, new DirectoryInfo(Path.Combine(to.FullName, d.Name)), nf, df); if (r != null) { return r; } } } return null; })); }
/// Dump variables matching the filter to a string for debug purposes public string ToDumpAll(IStringFilter filter) { var np = new List <Var>(this); np.Sort((x, y) => string.Compare(x.Name, y.Name, StringComparison.OrdinalIgnoreCase)); var sb = new StringBuilder(); int maxlen = 0; foreach (var pair in np) { maxlen = Math.Max(pair.Name.Length, maxlen); } foreach (var pair in np) { if (filter != null && !filter.IsMatch(pair.Name)) { continue; } Dump od = new Dump(pair.Value, ((pair.Value == null) ? typeof(object) : pair.Value.GetType()), pair.Name.PadRight(maxlen + 1, ' '), 7, s_dumpAllSettings); sb.AppendLine(od.ToString().Trim()); } return(sb.ToString().TrimEnd()); }
private object copySingleFile(IStringFilter nf, FileInfo f, FileInfo toFile) { if (nf != null && (!nf.IsMatch(f.FullName) || !CheckHidden(f))) { VerboseMessage("{0} did not pass filter", f.FullName); return(null); } var from = new FileOrDirectoryInfo(f); var to = new FileOrDirectoryInfo(toFile); bool skip = false; object ret = ProcessPrepare(from, to, delegate { if (toFile.Directory != null && !toFile.Directory.Exists) { bool created; object r = createDir(f.Directory, toFile.Directory, out created); if (!created || r != null) { return(r); } } bool overwrite = (Overwrite == OverwriteMode.Always); if (Overwrite == OverwriteMode.IfNewer) { if (toFile.Exists && toFile.LastWriteTimeUtc >= f.LastWriteTimeUtc) { VerboseMessage("Ignoring never file {0} ", toFile.FullName); return(null); } overwrite = true; } skip = (toFile.Exists && !overwrite); return(null); }); if (ret != null) { return(ret); } if (skip && Overwrite != OverwriteMode.Confirm) { VerboseMessage("Ignoring existing file {0} ", toFile.FullName); return(null); } ret = ProcessComplete(from, to, skip, delegate(bool skip1) { if (!skip1) { // Continue with copy if (toFile.Directory != null && !toFile.Directory.Exists) { toFile.Directory.Create(); } if (toFile.Exists && (toFile.Attributes & (FileAttributes.Hidden | FileAttributes.ReadOnly | FileAttributes.System)) != 0) { toFile.Attributes &= ~(FileAttributes.Hidden | FileAttributes.ReadOnly | FileAttributes.System); } if (Move) { if (toFile.FullName != f.FullName) { toFile.Delete(); } VerboseMessage("Move {0} => {1}", f.FullName, toFile.FullName); Context.MoveFile(f.FullName, toFile.FullName, true); } else { VerboseMessage("Copy {0} => {1}", f.FullName, toFile.FullName); Context.CopyFile(f.FullName, toFile.FullName, true); } } return(null); }); return(ret); }
private object downloadSingleFile(IStringFilter nf, Uri single, FileInfo toFile) { var from = new UriFileInfo(single); var ff = from.Name; if (string.IsNullOrEmpty(ff)) { ff = toFile.Name; } if (nf != null && (!nf.IsMatch(ff))) { VerboseMessage("{0} did not pass filter", single); return(null); } var to = new FileOrDirectoryInfo(toFile); bool skip = false; object ret = ProcessPrepare(from, to, delegate { if (toFile.Directory != null && !toFile.Directory.Exists) { bool created; object r = createDir(new DirectoryInfo(Path.GetTempPath()), toFile.Directory, out created); if (!created || r != null) { return(r); } } bool overwrite = (Overwrite == OverwriteMode.Always); if (Overwrite == OverwriteMode.IfNewer) { if (toFile.Exists && toFile.LastWriteTimeUtc >= from.LastWriteTimeUtc) { VerboseMessage("Ignoring never file {0} ", toFile.FullName); return(null); } overwrite = true; } skip = (toFile.Exists && !overwrite); return(null); }); if (ret != null) { return(ret); } if (skip && Overwrite != OverwriteMode.Confirm) { VerboseMessage("Ignoring existing file {0} ", toFile.FullName); return(null); } ret = ProcessComplete(from, to, skip, delegate(bool skip1) { if (!skip1) { // Continue with copy if (toFile.Directory != null && !toFile.Directory.Exists) { toFile.Directory.Create(); } VerboseMessage("Downloading {0} => {1}", from.FullName, toFile.FullName); Download dn = new Download { From = single.OriginalString, To = toFile.FullName, Transform = TransformRules.None }; return(Context.Execute(dn)); } return(null); }); return(ret); }
private static List <Var> getMethodsHelp(Type type, IStringFilter sf) { var v = new List <Var>(); for (int stat = 0; stat < 2; ++stat) { List <MethodInfo> mi = new List <MethodInfo>(); var flags = BindingFlags.Public | BindingFlags.InvokeMethod | (stat == 0 ? BindingFlags.Instance : BindingFlags.Static); foreach (var p in type.GetMethods(flags)) { if (p.Name.StartsWith("get_", StringComparison.OrdinalIgnoreCase) || p.Name.StartsWith("set_", StringComparison.OrdinalIgnoreCase) || p.Name.StartsWith("CreateObjRef", StringComparison.OrdinalIgnoreCase)) { continue; } if (sf != null && !sf.IsMatch(p.Name)) { continue; } mi.Add(p); } mi.Sort((a, b) => string.Compare(a.Name, b.Name, StringComparison.OrdinalIgnoreCase)); foreach (var info in mi) { StringBuilder sb1 = new StringBuilder(), sb = new StringBuilder(); sb1.Append(" "); if (info.IsStatic) { sb1.Append("static "); } if (info.IsAbstract) { sb1.Append("abstract "); } sb1.Append(Dump.GetFriendlyTypeName(info.ReturnType)); sb.Append(info.Name); var ge = info.GetGenericArguments(); if (ge != null && ge.Length > 0) { sb.Append("<"); for (int i = 0; i < ge.Length; ++i) { sb.Append(Dump.GetFriendlyTypeName(ge[i])); if (i != ge.Length - 1) { sb.Append(", "); } } sb.Append(">"); } sb.Append("("); bool first = true; foreach (var parameter in info.GetParameters()) { if (!first) { sb.Append(", "); } first = false; if (parameter.IsOut) { sb.Append("out "); } if (parameter.GetCustomAttributes(typeof(ParamArrayAttribute), false).Length > 0) { sb.Append("params "); } sb.Append(Dump.GetFriendlyTypeName(parameter.ParameterType)); sb.Append(" "); sb.Append(parameter.Name); } sb.Append(")"); v.Add(new Var(sb1.ToString(), sb.ToString())); } } return(v); }
private static List <Var> getPropertiesHelp(Type type, IStringFilter sf, bool isProperties) { var v = new List <Var>(); for (int stat = 0; stat < 2; ++stat) { if (type.IsEnum && stat == 0) { continue; } List <MemberInfo> mi = new List <MemberInfo>(); if (isProperties) { BindingFlags bf = BindingFlags.Public | BindingFlags.GetProperty | BindingFlags.SetProperty; bf |= ((stat == 1) ? BindingFlags.Static : BindingFlags.Instance); foreach (var p in type.GetProperties(bf)) { mi.Add(p); } } else { BindingFlags bf = BindingFlags.Public | BindingFlags.GetField | BindingFlags.SetProperty; bf |= ((stat == 1) ? BindingFlags.Static : BindingFlags.Instance); foreach (var p in type.GetFields(bf)) { mi.Add(p); } } if (!type.IsEnum) { mi.Sort((a, b) => string.Compare(a.Name, b.Name, StringComparison.OrdinalIgnoreCase)); } foreach (var info in mi) { if (sf != null && !sf.IsMatch(info.Name)) { continue; } var pinfo = info as PropertyInfo; var finfo = info as FieldInfo; StringBuilder sb1 = new StringBuilder(), sb = new StringBuilder(); sb1.Append(" "); if (!type.IsEnum) { if (stat == 1) { sb1.Append("static "); } sb1.Append(Dump.GetFriendlyTypeName((finfo != null) ? finfo.FieldType : pinfo.PropertyType)); sb.Append(info.Name); } else { sb1.Append(finfo.Name); sb.AppendFormat("0x{0:x10} ", Convert.ToUInt64(finfo.GetValue(null))); var dd = (DescriptionAttribute[])finfo.GetCustomAttributes(typeof(DescriptionAttribute), true); if (dd != null && dd.Length > 0) { sb.Append(dd[0].Description.Trim()); } } bool first = true; if (pinfo != null) { foreach (var parameter in pinfo.GetIndexParameters()) { if (!first) { sb.Append(", "); } else { sb.Append("["); } first = false; if (parameter.IsOut) { sb.Append("out "); } if (parameter.GetCustomAttributes(typeof(ParamArrayAttribute), false).Length > 0) { sb.Append("params "); } sb.Append(Dump.GetFriendlyTypeName(parameter.ParameterType)); sb.Append(" "); sb.Append(parameter.Name); } if (!first) { sb.Append("]"); } bool gt = pinfo.GetGetMethod() != null; bool st = pinfo.GetSetMethod() != null; if (gt && st) { sb.Append(" { get; set;}"); } else if (!gt && st) { sb.Append(" { set; }"); } else if (gt && !st) { sb.Append(" { get; }"); } } v.Add(new Var(sb1.ToString(), sb.ToString())); } } return(v); }
/// Get values of all public object fields and properties public static Vars PropsToVars(object o, IStringFilter filter) { Vars v = new Vars(); if (o != null) { Type t = o.GetType(); foreach (var p in t.GetProperties(BindingFlags.Instance|BindingFlags.Public)) { if (filter!=null && !filter.IsMatch(p.Name)) continue; var ip=p.GetIndexParameters(); if (ip != null && ip.Length != 0) continue; if (!p.CanRead) continue; try { v[p.Name] = p.GetValue(o, null); } catch { } } foreach (var f in t.GetFields(BindingFlags.Instance | BindingFlags.Public)) { if (filter != null && !filter.IsMatch(f.Name)) continue; try { v[f.Name] = f.GetValue(o); } catch { } } } return v; }
object extractZip(object zipFileName, string rootDirectory, IStringFilter nf, IStringFilter df) { object ret = null; WindowsNameTransform extractNameTransform = new WindowsNameTransform(rootDirectory); Dictionary <string, bool> dirs = new Dictionary <string, bool>(StringComparer.InvariantCultureIgnoreCase); Stream str; if (zipFileName is byte[]) { str = new MemoryStream((byte[])zipFileName); } else { str = new SeekableStream(Context.OpenStream(zipFileName.ToString()), true); } using (ZipFile zip = new ZipFile(str)) { if (Password != null) { zip.Password = Context.TransformStr(Password, Transform); } foreach (ZipEntry entry in zip) { string targetName = null; if (entry.IsFile) { targetName = extractNameTransform.TransformFile(entry.Name); if (!UsePath) { targetName = Path.Combine(rootDirectory, Path.GetFileName(targetName)); } } else if (entry.IsDirectory) { if (UsePath) { targetName = extractNameTransform.TransformDirectory(entry.Name); } else { targetName = rootDirectory; } } if (string.IsNullOrEmpty(targetName)) { continue; } if (!Hidden) { if (isDos(entry) && (((FileAttributes)entry.ExternalFileAttributes) & (FileAttributes.Hidden)) != 0) { continue; } } if (string.IsNullOrEmpty(entry.Name)) { continue; } var n = new ZipFSEntry(entry, ZipTime); if ((entry.IsFile && df.IsMatch(Path.GetDirectoryName(n.FullName)) && nf.IsMatch(n.Name)) || (entry.IsDirectory && df.IsMatch(n.FullName))) { object r = extract(zip, rootDirectory, targetName, entry, dirs); if (r != null) { return(r); } } } } return(ret); }
private object downloadSingleFile(IStringFilter nf, Uri single, FileInfo toFile) { var from = new UriFileInfo(single); var ff = from.Name; if (string.IsNullOrEmpty(ff)) ff = toFile.Name; if (nf != null && (!nf.IsMatch(ff))) { VerboseMessage("{0} did not pass filter", single); return null; } var to = new FileOrDirectoryInfo(toFile); bool skip = false; object ret = ProcessPrepare(from, to, delegate { if (toFile.Directory != null && !toFile.Directory.Exists) { bool created; object r = createDir(new DirectoryInfo(Path.GetTempPath()), toFile.Directory, out created); if (!created || r != null) return r; } bool overwrite = (Overwrite == OverwriteMode.Always); if (Overwrite == OverwriteMode.IfNewer) { if (toFile.Exists && toFile.LastWriteTimeUtc >= from.LastWriteTimeUtc) { VerboseMessage("Ignoring never file {0} ", toFile.FullName); return null; } overwrite = true; } skip = (toFile.Exists && !overwrite); return null; }); if (ret != null) return ret; if (skip && Overwrite != OverwriteMode.Confirm) { VerboseMessage("Ignoring existing file {0} ", toFile.FullName); return null; } ret = ProcessComplete(from, to, skip, delegate(bool skip1) { if (!skip1) { // Continue with copy if (toFile.Directory != null && !toFile.Directory.Exists) toFile.Directory.Create(); VerboseMessage("Downloading {0} => {1}", from.FullName, toFile.FullName); Download dn = new Download { From = single.OriginalString, To = toFile.FullName, Transform = TransformRules.None }; return Context.Execute(dn); } return null; }); return ret; }
private object copySingleFile(IStringFilter nf, FileInfo f, FileInfo toFile) { if (nf != null && (!nf.IsMatch(f.FullName) || !CheckHidden(f))) { VerboseMessage("{0} did not pass filter", f.FullName); return null; } var from=new FileOrDirectoryInfo(f); var to = new FileOrDirectoryInfo(toFile); bool skip = false; object ret = ProcessPrepare(from, to, delegate { if (toFile.Directory != null && !toFile.Directory.Exists) { bool created; object r = createDir(f.Directory, toFile.Directory, out created); if (!created || r != null) return r; } bool overwrite = (Overwrite == OverwriteMode.Always); if (Overwrite == OverwriteMode.IfNewer) { if (toFile.Exists && toFile.LastWriteTimeUtc >= f.LastWriteTimeUtc) { VerboseMessage("Ignoring never file {0} ", toFile.FullName); return null; } overwrite = true; } skip = (toFile.Exists && !overwrite); return null; }); if (ret!=null) return ret; if (skip && Overwrite != OverwriteMode.Confirm) { VerboseMessage("Ignoring existing file {0} ", toFile.FullName); return null; } ret = ProcessComplete(from,to, skip, delegate(bool skip1) { if (!skip1) { // Continue with copy if (toFile.Directory != null && !toFile.Directory.Exists) toFile.Directory.Create(); if (toFile.Exists && (toFile.Attributes & (FileAttributes.Hidden | FileAttributes.ReadOnly | FileAttributes.System)) != 0) toFile.Attributes &= ~(FileAttributes.Hidden | FileAttributes.ReadOnly | FileAttributes.System); if (Move) { if (toFile.FullName != f.FullName) toFile.Delete(); VerboseMessage("Move {0} => {1}", f.FullName, toFile.FullName); Context.MoveFile(f.FullName, toFile.FullName, true); } else { VerboseMessage("Copy {0} => {1}", f.FullName, toFile.FullName); Context.CopyFile(f.FullName, toFile.FullName, true); } } return null; }); return ret; }
private object copy(DirectoryInfo rootFrom, DirectoryInfo fromDir, DirectoryInfo toDir,IStringFilter nf, IStringFilter df) { bool isRoot = (rootFrom == fromDir); bool isVisible = (isRoot || CheckHidden(fromDir)); bool processFiles = isVisible; if (processFiles && (df != null && !df.IsMatch(fromDir.FullName))) { processFiles = false; VerboseMessage("{0} did not pass directory filter", fromDir.FullName); } var from = new FileOrDirectoryInfo(fromDir); var to = new FileOrDirectoryInfo(toDir); return ProcessPrepare(from, to, delegate { if (processFiles) { if (EmptyDirectories && !to.Exists) { bool created; object r = createDir(fromDir, toDir, out created); if (r != null || !created) return r; } foreach (FileInfo f in fromDir.GetFiles()) { FileInfo toFile = new FileInfo(Path.Combine(to.FullName, f.Name)); object r = copySingleFile(nf, f, toFile); if (r != null) return r; } } if (Recursive) { foreach (DirectoryInfo d in fromDir.GetDirectories()) { object r = copy(rootFrom, d, new DirectoryInfo(Path.Combine(to.FullName, d.Name)), nf, df); if (r != null) return r; } } return null; }); }
object extractZip( object zipFileName, string rootDirectory,IStringFilter nf, IStringFilter df) { object ret = null; WindowsNameTransform extractNameTransform = new WindowsNameTransform(rootDirectory); Dictionary<string, bool> dirs = new Dictionary<string, bool>(StringComparer.InvariantCultureIgnoreCase); Stream str; if (zipFileName is byte[]) str = new MemoryStream((byte[])zipFileName); else str=new SeekableStream(Context.OpenStream(zipFileName.ToString()),true); using (ZipFile zip = new ZipFile(str)) { if (Password != null) zip.Password = Context.TransformStr(Password, Transform); foreach (ZipEntry entry in zip) { string targetName = null; if (entry.IsFile) { targetName = extractNameTransform.TransformFile(entry.Name); if (!UsePath) targetName = Path.Combine(rootDirectory, Path.GetFileName(targetName)); } else if (entry.IsDirectory) { if (UsePath) targetName = extractNameTransform.TransformDirectory(entry.Name); else targetName = rootDirectory; } if (string.IsNullOrEmpty(targetName)) continue; if (!Hidden) { if (isDos(entry) && (((FileAttributes) entry.ExternalFileAttributes) & (FileAttributes.Hidden)) != 0) continue; } if (string.IsNullOrEmpty(entry.Name)) continue; var n = new ZipFSEntry(entry, ZipTime); if ((entry.IsFile && df.IsMatch(Path.GetDirectoryName(n.FullName)) && nf.IsMatch(n.Name)) || (entry.IsDirectory && df.IsMatch(n.FullName))) { object r = extract(zip, rootDirectory, targetName, entry, dirs); if (r!=null) return r; } } } return ret; }
private static List<Var> getPropertiesHelp(Type type, IStringFilter sf, bool isProperties) { var v = new List<Var>(); for (int stat = 0; stat < 2; ++stat) { if (type.IsEnum && stat==0) continue; List<MemberInfo> mi = new List<MemberInfo>(); if (isProperties) { BindingFlags bf = BindingFlags.Public | BindingFlags.GetProperty | BindingFlags.SetProperty; bf |= ((stat == 1) ? BindingFlags.Static : BindingFlags.Instance); foreach (var p in type.GetProperties(bf)) mi.Add(p); } else { BindingFlags bf = BindingFlags.Public | BindingFlags.GetField | BindingFlags.SetProperty; bf |= ((stat == 1) ? BindingFlags.Static : BindingFlags.Instance); foreach (var p in type.GetFields(bf)) mi.Add(p); } if (!type.IsEnum) mi.Sort((a, b) => string.Compare(a.Name, b.Name, StringComparison.OrdinalIgnoreCase)); foreach (var info in mi) { if (sf != null && !sf.IsMatch(info.Name)) continue; var pinfo = info as PropertyInfo; var finfo = info as FieldInfo; StringBuilder sb1 = new StringBuilder(), sb = new StringBuilder(); sb1.Append(" "); if (!type.IsEnum) { if (stat == 1) sb1.Append("static "); sb1.Append(Dump.GetFriendlyTypeName((finfo != null) ? finfo.FieldType : pinfo.PropertyType)); sb.Append(info.Name); } else { sb1.Append(finfo.Name); sb.AppendFormat("0x{0:x10} ",Convert.ToUInt64( finfo.GetValue(null))); var dd = (DescriptionAttribute[])finfo.GetCustomAttributes(typeof(DescriptionAttribute),true); if (dd != null && dd.Length>0) sb.Append(dd[0].Description.Trim()); } bool first = true; if (pinfo != null) { foreach (var parameter in pinfo.GetIndexParameters()) { if (!first) sb.Append(", "); else sb.Append("["); first = false; if (parameter.IsOut) sb.Append("out "); if (parameter.GetCustomAttributes(typeof (ParamArrayAttribute), false).Length > 0) sb.Append("params "); sb.Append(Dump.GetFriendlyTypeName(parameter.ParameterType)); sb.Append(" "); sb.Append(parameter.Name); } if (!first) sb.Append("]"); bool gt = pinfo.GetGetMethod() != null; bool st = pinfo.GetSetMethod() != null; if (gt && st) sb.Append(" { get; set;}"); else if (!gt && st) sb.Append(" { set; }"); else if (gt && !st) sb.Append(" { get; }"); } v.Add(new Var(sb1.ToString(), sb.ToString())); } } return v; }
private static List<Var> getMethodsHelp(Type type, IStringFilter sf) { var v = new List<Var>(); for (int stat = 0; stat < 2; ++stat) { List<MethodInfo> mi = new List<MethodInfo>(); var flags = BindingFlags.Public | BindingFlags.InvokeMethod | (stat == 0 ? BindingFlags.Instance : BindingFlags.Static); foreach (var p in type.GetMethods(flags)) { if (p.Name.StartsWith("get_", StringComparison.OrdinalIgnoreCase) || p.Name.StartsWith("set_", StringComparison.OrdinalIgnoreCase) || p.Name.StartsWith("CreateObjRef",StringComparison.OrdinalIgnoreCase)) continue; if (sf != null && !sf.IsMatch(p.Name)) continue; mi.Add(p); } mi.Sort((a, b) => string.Compare(a.Name, b.Name, StringComparison.OrdinalIgnoreCase)); foreach (var info in mi) { StringBuilder sb1 = new StringBuilder(), sb = new StringBuilder(); sb1.Append(" "); if (info.IsStatic) sb1.Append("static "); if (info.IsAbstract) sb1.Append("abstract "); sb1.Append(Dump.GetFriendlyTypeName(info.ReturnType)); sb.Append(info.Name); var ge = info.GetGenericArguments(); if (ge!=null && ge.Length>0) { sb.Append("<"); for (int i = 0; i < ge.Length; ++i) { sb.Append(Dump.GetFriendlyTypeName(ge[i])); if (i != ge.Length - 1) sb.Append(", "); } sb.Append(">"); } sb.Append("("); bool first = true; foreach (var parameter in info.GetParameters()) { if (!first) sb.Append(", "); first = false; if (parameter.IsOut) sb.Append("out "); if (parameter.GetCustomAttributes(typeof(ParamArrayAttribute), false).Length > 0) sb.Append("params "); sb.Append(Dump.GetFriendlyTypeName(parameter.ParameterType)); sb.Append(" "); sb.Append(parameter.Name); } sb.Append(")"); v.Add(new Var(sb1.ToString(), sb.ToString())); } } return v; }