public void AddStream(Compression _method, string _filenameInZip, Stream _source, DateTime _modTime, string _comment, ushort access = 0x8100)
{
if (Access == FileAccess.Read)
throw new InvalidOperationException("Writing is not alowed");
//long offset;
if (this.Files.Count==0)
;//offset = 0;
else
{
/*ZipFileEntry last = this.*/Files[this.Files.Count-1];
// /*offset =*/ last.HeaderOffset + last.HeaderSize;
}
// Prepare the fileinfo
ZipFileEntry zfe = new ZipFileEntry();
if (_source.Length < 10)
zfe.Method = Compression.Store;
else
zfe.Method = _method;
zfe.EncodeUTF8 = this.EncodeUTF8;
zfe.FilenameInZip = NormalizedFilename(_filenameInZip);
zfe.Comment = (_comment == null ? "" : _comment);
zfe.ExternalFileAttributes = 0x8000 | access & 0xfff; // file
// Even though we write the header now, it will have to be rewritten, since we don't know compressed size or crc.
zfe.Crc32 = 0; // to be updated later
zfe.HeaderOffset = (uint)this.ZipFileStream.Position; // offset within file of the start of this local record
zfe.ModifyTime = _modTime;
// Write local header
WriteLocalHeader(ref zfe);
zfe.FileOffset = (uint)this.ZipFileStream.Position;
// Write file to zip (store)
Store(ref zfe, _source);
_source.Close();
this.UpdateCrcAndSizes(ref zfe);
Files.Add(zfe);
}