/// <summary>
/// Implementation of writing an archive directory to the stream.
/// </summary>
/// <param name="writer">The writer stream.</param>
private void WriteArchiveDirectoryToStream(Stream writer)
{
// Write the directory entries.
long startOfDirectory = writer.Position;
foreach (ZipArchiveFile entry in _entries.Values)
{
entry.WriteArchiveDirectoryEntryToStream(writer);
}
long endOfDirectory = writer.Position;
// Write the trailer
ByteBuffer trailer = new ByteBuffer(22);
trailer.WriteUInt32(ZipArchiveFile.SignatureArchiveDirectoryEnd);
trailer.WriteUInt16(ZipArchiveFile.DiskNumberStart);
trailer.WriteUInt16(ZipArchiveFile.DiskNumberStart);
trailer.WriteUInt16((ushort)_entries.Count);
trailer.WriteUInt16((ushort)_entries.Count);
trailer.WriteUInt32((uint)(endOfDirectory - startOfDirectory)); // directory size
trailer.WriteUInt32((uint)startOfDirectory); // directory start
trailer.WriteUInt16((ushort)ZipArchiveFile.FileCommentLength);
trailer.WriteContentsTo(writer);
}