EndArchiveHeader.cs 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. using SharpCompress.IO;
  2. namespace SharpCompress.Common.Rar.Headers
  3. {
  4. internal class EndArchiveHeader : RarHeader
  5. {
  6. public EndArchiveHeader(RarHeader header, RarCrcBinaryReader reader)
  7. : base(header, reader, HeaderType.EndArchive)
  8. {
  9. }
  10. protected override void ReadFinish(MarkingBinaryReader reader)
  11. {
  12. if (IsRar5)
  13. {
  14. Flags = reader.ReadRarVIntUInt16();
  15. }
  16. else
  17. {
  18. Flags = HeaderFlags;
  19. if (HasFlag(EndArchiveFlagsV4.DATA_CRC))
  20. {
  21. ArchiveCrc = reader.ReadInt32();
  22. }
  23. if (HasFlag(EndArchiveFlagsV4.VOLUME_NUMBER))
  24. {
  25. VolumeNumber = reader.ReadInt16();
  26. }
  27. }
  28. }
  29. private ushort Flags { get; set; }
  30. private bool HasFlag(ushort flag)
  31. {
  32. return (Flags & flag) == flag;
  33. }
  34. internal int? ArchiveCrc { get; private set; }
  35. internal short? VolumeNumber { get; private set; }
  36. }
  37. }