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(); } } }