Ejemplo n.º 1
0
        /// 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);
        }
Ejemplo n.º 2
0
        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;
            }));
        }
Ejemplo n.º 3
0
        /// 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());
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
        /// 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;
        }
Ejemplo n.º 9
0
        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);
        }
Ejemplo n.º 10
0
        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;
        }
Ejemplo n.º 11
0
        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;
        }
Ejemplo n.º 12
0
        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;
                    });
        }
Ejemplo n.º 13
0
        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;
        }
Ejemplo n.º 14
0
        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;
        }
Ejemplo n.º 15
0
        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;
        }