Beispiel #1
0
        //  -------------------------------------------------------------------
        /// <summary>
        /// Adds a submittable item to the package that was started by a call
        /// to StartPackage.
        /// </summary>
        /// <param name="item"></param>
        public void AddSubmittableItem(ISubmittableItem item)
        {
            if (item.Kind == SubmittableItemKind.Folder)
            {
                if (item.Filename != "" && item.Filename != "\\")
                {
                    ZipEntry entry =
                        zipFactory.MakeDirectoryEntry(item.Filename);

                    zipStream.PutNextEntry(entry);
                    zipStream.CloseEntry();
                }
            }
            else if (item.Kind == SubmittableItemKind.File)
            {
                Stream itemStream = item.GetStream();

                // If we try to stream the file directly into the zip file
                // without determining its size for the zip entry, the archive
                // will not expand properly under OS X. Until we can fix this,
                // we stream each file entirely into memory to compute its
                // length, then stream the memory buffer out to the zip file.

                MemoryStream memStream = new MemoryStream();
                StreamUtils.Copy(itemStream, memStream, buffer);
                itemStream.Close();

                long length = memStream.Length;

                ZipEntry entry = zipFactory.MakeFileEntry(item.Filename);
                entry.Size = length;
                zipStream.PutNextEntry(entry);

                memStream.Seek(0, SeekOrigin.Begin);
                StreamUtils.Copy(memStream, zipStream, buffer);

                zipStream.CloseEntry();
            }
        }