using ICSharpCode.SharpZipLib.Zip.Compression.Streams;\r
using ICSharpCode.SharpZipLib.Zip.Compression;\r
\r
-namespace ICSharpCode.SharpZipLib.Zip {\r
+namespace ICSharpCode.SharpZipLib.Zip \r
+{\r
\r
/// <summary>\r
/// This class represents a Zip archive. You can ask for the contained\r
/// static public void Main(string[] args)\r
/// {\r
/// ZipFile zFile = new ZipFile(args[0]);\r
- /// Console.WriteLine("Listing of : " + zFile.Name);\r
- /// Console.WriteLine("");\r
- /// Console.WriteLine("Raw Size Size Date Time Name");\r
- /// Console.WriteLine("-------- -------- -------- ------ ---------");\r
+ /// //Console.WriteLine("Listing of : " + zFile.Name);\r
+ /// //Console.WriteLine("");\r
+ /// //Console.WriteLine("Raw Size Size Date Time Name");\r
+ /// //Console.WriteLine("-------- -------- -------- ------ ---------");\r
/// foreach (ZipEntry e in zFile) {\r
/// DateTime d = e.DateTime;\r
- /// Console.WriteLine("{0, -10}{1, -10}{2} {3} {4}", e.Size, e.CompressedSize,\r
+ /// //Console.WriteLine("{0, -10}{1, -10}{2} {3} {4}", e.Size, e.CompressedSize,\r
/// d.ToString("dd-MM-yy"), d.ToString("t"),\r
/// e.Name);\r
/// }\r
public class ZipFile : IEnumerable\r
{\r
string name;\r
+ string comment;\r
Stream baseStream;\r
ZipEntry[] entries;\r
\r
\r
int centralOffset = ReadLeInt();\r
\r
+ // GET COMMENT SIZE (COMES AFTER CENTRALOFFSET) \r
+ int commentSize = ReadLeShort(); \r
+ byte[] zipComment = new byte[commentSize]; \r
+ baseStream.Read(zipComment, 0, zipComment.Length); \r
+ comment = ZipConstants.ConvertToString(zipComment); \r
+ \r
entries = new ZipEntry[count];\r
baseStream.Seek(centralOffset, SeekOrigin.Begin);\r
for (int i = 0; i < count; i++) {\r
entry.Crc = crc & 0xffffffffL;\r
entry.Size = size & 0xffffffffL;\r
entry.CompressedSize = csize & 0xffffffffL;\r
- entry.DosTime = dostime;\r
+ entry.DosTime = (uint)dostime;\r
if (extraLen > 0) {\r
byte[] extra = new byte[extraLen];\r
baseStream.Read(extra, 0, extraLen);\r
baseStream.Read(buffer, 0, commentLen);\r
entry.Comment = ZipConstants.ConvertToString(buffer);\r
}\r
- entry.zipFileIndex = i;\r
- entry.offset = offset;\r
+ entry.ZipFileIndex = i;\r
+ entry.Offset = offset;\r
entries[i] = entry;\r
}\r
}\r
return i;\r
}\r
}\r
- return -1;\r
+ return -1; // ok\r
}\r
\r
/// <summary>\r
long CheckLocalHeader(ZipEntry entry)\r
{\r
lock(baseStream) {\r
- baseStream.Seek(entry.offset, SeekOrigin.Begin);\r
+ baseStream.Seek(entry.Offset, SeekOrigin.Begin);\r
if (ReadLeInt() != ZipConstants.LOCSIG) {\r
throw new ZipException("Wrong Local header signature");\r
}\r
}\r
\r
int extraLen = entry.Name.Length + ReadLeShort();\r
- return entry.offset + ZipConstants.LOCHDR + extraLen;\r
+ return entry.Offset + ZipConstants.LOCHDR + extraLen;\r
}\r
}\r
\r
throw new InvalidOperationException("ZipFile has closed");\r
}\r
\r
- int index = entry.zipFileIndex;\r
+ int index = entry.ZipFileIndex;\r
if (index < 0 || index >= entries.Length || entries[index].Name != entry.Name) {\r
index = GetEntryIndex(entry.Name);\r
if (index < 0) {\r
}\r
}\r
\r
+ /// <summary>\r
+ /// The comment for the whole zip file.\r
+ /// </summary>\r
+ public string ZipFileComment {\r
+ get {\r
+ return comment;\r
+ }\r
+ }\r
+ \r
/// <summary>\r
/// Returns the name of this zip file.\r
/// </summary>\r
end = start + len;\r
}\r
\r
- public override int Available {\r
+ public override int Available \r
+ {\r
get {\r
long amount = end - filepos;\r
if (amount > Int32.MaxValue) {\r
public override int ReadByte()\r
{\r
if (filepos == end) {\r
- return -1;\r
+ return -1; //ok\r
}\r
+ \r
lock(baseStream) {\r
baseStream.Seek(filepos++, SeekOrigin.Begin);\r
return baseStream.ReadByte();\r
if (len > end - filepos) {\r
len = (int) (end - filepos);\r
if (len == 0) {\r
- return -1;\r
+ return 0;\r
}\r
}\r
lock(baseStream) {\r