示例#1
0
        public void Save(string fileName)
        {
            FileStream filestream = null;

            try
            {
                filestream = new FileStream(fileName, FileMode.Create, FileAccess.Write);

                using (BinaryWriter file = new BinaryWriter(filestream))
                {
                    filestream = null;

                    int mapSize;
                    var blocks = this.BuildMapBlocks(out mapSize);

                    file.Write(Encoding.ASCII.GetBytes("MCMP"));

                    file.WriteBigEndian((short)(this.Entries.Count + 1));

                    file.Write((byte)0);
                    file.WriteBigEndian(mapSize + 24);
                    file.WriteBigEndian(mapSize + 24);

                    foreach (var entry in this.Entries)
                    {
                        file.Write(entry.Codec);
                        file.WriteBigEndian(entry.RawSize);
                        file.WriteBigEndian(entry.CompressedSize);
                    }

                    file.WriteBigEndian((short)(this.Codecs.Count * 5));

                    foreach (var codec in this.Codecs)
                    {
                        file.Write(Encoding.ASCII.GetBytes(codec));
                        file.Write((byte)0);
                    }

                    file.Write(Encoding.ASCII.GetBytes("iMUS"));
                    file.Write(this.DataRawSize + mapSize + 16);

                    ImcFile.WriteMap(this, file, blocks, mapSize);

                    file.Write(Encoding.ASCII.GetBytes("DATA"));
                    file.WriteBigEndian(this.DataRawSize);

                    foreach (var entry in this.Entries)
                    {
                        file.Write(entry.Data);
                    }

                    this.FileName = fileName;
                }
            }
            finally
            {
                if (filestream != null)
                {
                    filestream.Dispose();
                }
            }
        }