Exemple #1
0
        public void Build(string strParentDir, CompressArgs objArgs)
        {
            string[] files = System.IO.Directory.GetFiles(strParentDir);
            foreach (string file in files)
            {
                if (ExtMatch(file, objArgs.Extensions))
                {
                    FileEntry fe = new FileEntry();
                    fe.strFullPath          = file;
                    fe.strTableRelativePath = fe.strFullPath; //TODO: fix this ** make it relative to tabe.
                    fe.iFileSize            = (Int32) new System.IO.FileInfo(file).Length;
                    fe.iFileOffset          = Files.Count > 0 ? Files[Files.Count - 1].iFileOffset + Files[Files.Count - 1].iFileSize : 0;

                    Files.Add(fe);
                }
            }
            string[] dirs = System.IO.Directory.GetDirectories(strParentDir);
            foreach (string dir in dirs)
            {
                if (!IsExcludeDir(dir, objArgs))
                {
                    Build(dir, objArgs);
                }
            }
        }
Exemple #2
0
        private bool IsExcludeDir(string dir, CompressArgs objArgs)
        {
            string full = System.IO.Path.GetFullPath(dir);

            foreach (string path in objArgs.ExcludeDirs)
            {
                string full2 = System.IO.Path.GetFullPath(path);
                if (full.Equals(full2))
                {
                    return(true);
                }
            }
            return(false);
        }
Exemple #3
0
        static void Main(string[] args)
        {
            CompressArgs objArgs = new CompressArgs();

            objArgs.Parse(args);

            Console.WriteLine("**************************************************");
            Console.WriteLine("* Compressor v" + strVersion);
            Console.WriteLine("* Usage: compressor.exe -p [exe path] -o [output dir] -r [root dir] -e [csv of file exts'] -x [dir to exclude]");

            Console.WriteLine("* Derek page  1/6/18");
            Console.WriteLine("**************************************************");
            if (!System.IO.Directory.Exists(objArgs.RootDir))
            {
                Utils.PrintAndExit("Directory '" + objArgs.RootDir + "' does not exist.", true);
            }
            else if (!System.IO.File.Exists(objArgs.ExeName))
            {
                Utils.PrintAndExit("Executable file '" + objArgs.ExeName + "' does not exist.", true);
            }
            else
            {
                try
                {
                    Console.WriteLine("Building..");
                    //build file table.
                    FileTable ft = new FileTable();
                    ft.Build(objArgs.RootDir, objArgs);

                    Console.WriteLine("Located " + ft.Files.Count + " files, " + (float)ft.GetTotalFileLengthBytes() / (float)(1000 * 1000) + " Mbytes.");

                    byte[] exeBytes = System.IO.File.ReadAllBytes(objArgs.ExeName);
                    byte[] _final   = Utils.Combine(exeBytes, ft.Serialize());

                    //Pack on 4 bytes at the end of the EXE size so we can find the table.
                    _final = Utils.Combine(_final, (Int32)exeBytes.Length);
                    //Pack an additional signature
                    _final = Utils.Combine(_final, ASCIIEncoding.ASCII.GetBytes("asdf"));

                    //Backup? Maybe.
                    //System.IO.File.Move(strExe, strExe + "-" + DateTime.Now.ToString("YYYYMMDDHHMMSS"));
                    string strOutfull = System.IO.Path.GetFullPath(objArgs.OutputDir);
                    Console.WriteLine("Saving to '" + strOutfull + "'..");
                    if (!System.IO.Directory.Exists(strOutfull))
                    {
                        Console.WriteLine("Creating directory '" + strOutfull + "'");
                        System.IO.Directory.CreateDirectory(strOutfull);
                    }
                    string strOutFile = System.IO.Path.Combine(strOutfull, objArgs.ExeName);

                    Console.WriteLine("Writing '" + strOutFile + "'");
                    System.IO.File.WriteAllBytes(strOutFile, _final);

                    ft.Print();

                    Console.WriteLine("Packed " + exeBytes.Length + " bytes to " + _final.Length + " bytes.");
                    Console.WriteLine("Added " + (_final.Length - exeBytes.Length) + " bytes.");
                    //   Utils.PrintAndExit("Press any key to exit", false);
                }
                catch (Exception ex)
                {
                    Utils.PrintAndExit("There was an error while building the file table:\r\n" + ex.ToString(), true);
                }
            }
        }