public void Add(string internalFileName, int position, int length) { if (isDisposed) { throw new InvalidOperationException(); } headerLookup.Add(internalFileName, new MyArchiveFileHeaderElement(position, length)); HeaderOrder.Add(position, internalFileName); using (MemoryStream tempStream = new MemoryStream(TEMP_STREAM_BUFFER)) { using (BinaryWriter writer = new BinaryWriter(tempStream)) { writer.Write(internalFileName.Length); foreach (char c in internalFileName) { writer.Write(c); } writer.Write(position); writer.Write(length); writer.Flush(); var buffer = tempStream.ToArray(); RawHeader.Write(buffer, 0, buffer.Length); } } }