Beispiel #1
0
        public EcfFileChunkDefinition Add(EcfChunk rawChunk, int rawChunkIndex)
        {
            Contract.Requires(rawChunk != null);

            var chunk = new EcfFileChunkDefinition();

            chunk.Initialize(this, rawChunk, rawChunkIndex);
            Chunks.Add(chunk);

            return(chunk);
        }
        internal void SetupRawChunk(EcfChunk rawChunk, int rawChunkIndex)
        {
            RawChunkIndex = rawChunkIndex;

            rawChunk.EntryId          = Id;
            rawChunk.DataAlignmentBit = AlignmentBit;
            rawChunk.CompressionType  = CompressionType;
            rawChunk.IsContiguous     = IsContiguous;
            rawChunk.IsWriteCombined  = IsWriteCombined;
            rawChunk.IsDeflateStream  = IsDeflateStream;
            rawChunk.IsResourceTag    = IsResourceTag;
        }
        public void Initialize(EcfFileDefinition parent, EcfChunk rawChunk, int rawChunkIndex)
        {
            RawChunkIndex = rawChunkIndex;

            Parent          = parent;
            Id              = rawChunk.EntryId;
            AlignmentBit    = rawChunk.DataAlignmentBit;
            CompressionType = rawChunk.CompressionType;
            IsContiguous    = rawChunk.IsContiguous;
            IsWriteCombined = rawChunk.IsWriteCombined;
            IsDeflateStream = rawChunk.IsDeflateStream;
            IsResourceTag   = rawChunk.IsResourceTag;
        }
        private void SerializeMainChunk(EcfChunk chunk, IO.EndianStream s)
        {
            if (s.IsReading)
            {
                if (!chunk.IsDeflateStream)
                {
                    throw new System.IO.InvalidDataException(string.Format("{0}'s is supposed to be an XMB but isn't compressed",
                                                                           chunk.EntryId.ToString("X16")));
                }

                FileData = CompressedStream.DecompressFromStream(s);
            }
            else if (s.IsWriting)
            {
                Contract.Assert(false);

                chunk.IsDeflateStream = true;
            }
        }
        void ExpandChunkToFile(EcfFileChunkDefinition chunk, EcfChunk rawChunk)
        {
            string file_path = EcfDefinition.GetChunkAbsolutePath(chunk);

            if (!ExpanderOptions.Test(EcfFileExpanderOptions.DontOverwriteExistingFiles))
            {
                if (File.Exists(file_path))
                {
                    if (VerboseOutput != null)
                    {
                        VerboseOutput.WriteLine("\tSkipping chunk, output file already exists: {0}", file_path);
                    }

                    return;
                }
            }

            using (var fs = File.OpenWrite(file_path))
            {
                var chunk_bytes = rawChunk.GetBuffer(mEcfStream);
                fs.Write(chunk_bytes, 0, chunk_bytes.Length);
            }
        }