示例#1
0
        /// <summary>
        /// Reads the current entry into the specified memory stream
        /// </summary>
        /// <remarks>
        /// The data is put directly into the memory stream buffer
        /// No write operations are performed on the memory stream
        /// </remarks>
        /// <param name="memoryStream">memory stream</param>
        public void ReadCurrentEntry(MemoryStream memoryStream)
        {
            // Make sure the memory stream has enough capacity to hold the data
            memoryStream.SetLength(_currentZipEntry.UncompressedLength);

            byte[] memBuffer = memoryStream.GetBuffer();
            int    bytesRead = 0;
            int    offset    = 0;

            unsafe
            {
                fixed(byte *p = memBuffer)
                {
                    for (; ;)
                    {
                        bytesRead = ZlibWrapper.ZlibUnzReadCurrentFile(_zipFileHandle, (IntPtr)p + offset, 4096);
                        offset   += bytesRead;

                        if (bytesRead <= 0)
                        {
                            break;
                        }
                    }
                }
            }
        }