Exemple #1
0
        static void Unpack(PackerSettings settings)
        {
            Console.WriteLine("-- Unpack Files in " + settings.target + " --");
            FileStream        stream = new FileStream(settings.target, FileMode.Open);
            BinaryReader      r      = new BinaryReader(stream);
            DiskArchiveHeader header = new DiskArchiveHeader();

            header.Read(r);
            if (header.HasValidMagicValue() == false)
            {
                Console.WriteLine("Error: " + settings.target + " is not a P.A.C.K file");
                return;
            }
            Console.WriteLine("Files: " + header.numFiles);
            Console.WriteLine("Manifest position: " + header.fileListOffset);

            string outputDir = "output\\" + Path.GetFileNameWithoutExtension(settings.target);

            Console.WriteLine("Writing contents to " + outputDir);

            Directory.CreateDirectory(outputDir);

            r.BaseStream.Seek(header.fileListOffset, SeekOrigin.Begin);
            for (int i = 0; i < header.numFiles; ++i)
            {
                DiskArchiveFile file = new DiskArchiveFile();
                uint            manifestReadPosition = file.Read(r);

                r.BaseStream.Seek(file.offset, SeekOrigin.Begin);

                byte[] bytes = r.ReadBytes((int)file.numBytes);
                // remember seek back to manifest position
                r.BaseStream.Seek(manifestReadPosition, SeekOrigin.Begin);

                string fileName = outputDir + file.fileName.Trim('\0');
                Console.WriteLine("Writing " + fileName + ": Size: " + bytes.Length);

                // Make sure directory exists
                Directory.CreateDirectory(Path.GetDirectoryName(fileName));

                File.WriteAllBytes(fileName, bytes);
            }
        }
Exemple #2
0
        static void ListContents(PackerSettings settings)
        {
            Console.WriteLine("-- List Files in " + settings.target + " --");
            FileStream        stream = new FileStream(settings.target, FileMode.Open);
            BinaryReader      r      = new BinaryReader(stream);
            DiskArchiveHeader header = new DiskArchiveHeader();

            header.Read(r);
            if (header.HasValidMagicValue() == false)
            {
                Console.WriteLine("Error: " + settings.target + " is not a P.A.C.K file");
                return;
            }
            Console.WriteLine("Files: " + header.numFiles);
            Console.WriteLine("Manifest position: " + header.fileListOffset);
            r.BaseStream.Seek(header.fileListOffset, SeekOrigin.Begin);
            for (int i = 0; i < header.numFiles; ++i)
            {
                DiskArchiveFile file = new DiskArchiveFile();
                file.Read(r);
                Console.WriteLine(file.fileName + ": Size: " + file.numBytes + " offset: " + file.offset + " type: " + file.info[0]);
            }
        }