protected override IEnumerable <TarArchiveEntry> LoadEntries(IEnumerable <TarVolume> volumes) { Stream stream = volumes.Single().Stream; TarHeader previousHeader = null; foreach (TarHeader header in TarHeaderFactory.ReadHeader(StreamingMode.Seekable, stream)) { if (header != null) { if (header.EntryType == EntryType.LongName) { previousHeader = header; } else { if (previousHeader != null) { var entry = new TarArchiveEntry(this, new TarFilePart(previousHeader, stream), CompressionType.None); var oldStreamPos = stream.Position; using (var entryStream = entry.OpenEntryStream()) { using (var memoryStream = new MemoryStream()) { entryStream.TransferTo(memoryStream); memoryStream.Position = 0; var bytes = memoryStream.ToArray(); header.Name = ArchiveEncoding.Default.GetString(bytes, 0, bytes.Length).TrimNulls(); } } stream.Position = oldStreamPos; previousHeader = null; } yield return(new TarArchiveEntry(this, new TarFilePart(header, stream), CompressionType.None)); } } } }