public void KBinWriter_Document_ReturnsByteArray()
        {
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

            var source  = XDocument.Load(@"testcases.xml");
            var kbin    = new KBinWriter(source);
            var outKbin = new KBinReader(kbin.Document);
        }
        public void KBinReader_GetXML_ReturnsValidXML()
        {
            var sw = new Stopwatch();

            sw.Start();

            var kbin = new KBinReader(File.ReadAllBytes(@"testcases_out.kbin"));

            sw.Stop();

            _testOutputHelper.WriteLine(sw.Elapsed.ToString());
            _testOutputHelper.WriteLine(kbin.Document.ToString());
        }
Exemple #3
0
        public static GenericFolder Open(string path)
        {
            var file   = File.OpenRead(path);
            var header = new ByteBuffer(file.Read(36));

            if (header.GetU32() != Signature)
            {
                Program.LogWarning("File is not an IFS file.");
                return(null);
            }

            var version = header.GetU16();

            if ((header.GetU16() ^ version) != 0xFFFF)
            {
                Program.LogWarning("File version check failed.");
                return(null);
            }

            header.GetU32();             // time
            header.GetU32();             // ifs size
            var manifestEnd = header.GetU32();
            var dataBlob    = new FileBlob(file, manifestEnd);

            if (version > 1)
            {
                header.Offset += 16;
            }

            file.Seek(header.Offset, SeekOrigin.Begin);
            var manifest = new XDocument();

            try {
                manifest = new KBinReader(file.Read((int)(manifestEnd - header.Offset))).Document;
            } catch (Exception ex) {
                Program.LogWarning($"Error during manifest decoding: {ex}");
            }

            var root = new GenericFolder(dataBlob, manifest, null, path, Path.GetFileName(path));

            try {
                root.FromXml();
            } catch (Exception ex) {
                Program.LogWarning("Exception during ifs unpack: {0}", ex);
            }

            return(root);
        }