2 using System.Collections.Generic;
6 namespace SharpCompress.Common.Zip.Headers
8 internal abstract class ZipFileEntry : ZipHeader
10 protected ZipFileEntry(ZipHeaderType type)
13 Extra = new List<ExtraData>();
17 internal bool IsDirectory
19 get { return Name.EndsWith("/"); }
22 protected string DecodeString(byte[] str)
24 if (FlagUtility.HasFlag(Flags, HeaderFlags.UTF8))
26 return Encoding.UTF8.GetString(str, 0, str.Length);
28 return ArchiveEncoding.Default.GetString(str, 0, str.Length);
31 protected byte[] EncodeString(string str)
33 if (FlagUtility.HasFlag(Flags, HeaderFlags.UTF8))
35 return Encoding.UTF8.GetBytes(str);
37 return ArchiveEncoding.Default.GetBytes(str);
40 internal Stream PackedStream { get; set; }
42 internal string Name { get; set; }
44 internal HeaderFlags Flags { get; set; }
46 internal ZipCompressionMethod CompressionMethod { get; set; }
48 internal uint CompressedSize { get; set; }
50 internal long? DataStartPosition { get; set; }
52 internal uint UncompressedSize { get; set; }
54 internal List<ExtraData> Extra { get; set; }
56 internal PkwareTraditionalEncryptionData PkwareTraditionalEncryptionData { get; set; }
57 #if !PORTABLE && !NETFX_CORE
58 internal WinzipAesEncryptionData WinzipAesEncryptionData { get; set; }
61 internal ushort LastModifiedDate { get; set; }
63 internal ushort LastModifiedTime { get; set; }
65 internal uint Crc { get; set; }
67 protected void LoadExtra(byte[] extra)
69 for (int i = 0; i < extra.Length;)
71 ExtraDataType type = (ExtraDataType) BitConverter.ToUInt16(extra, i);
72 if (!Enum.IsDefined(typeof (ExtraDataType), type))
76 ushort length = BitConverter.ToUInt16(extra, i + 2);
77 byte[] data = new byte[length];
78 Buffer.BlockCopy(extra, i + 4, data, 0, length);
79 Extra.Add(new ExtraData
89 internal ZipFilePart Part { get; set; }