创建和更新zip文件

时间:2014-07-14 23:50:13

标签: c# sharpziplib

根据文档记录,我很难将其付诸实践。使用ZipFile我想在内存中创建一个zip然后能够更新它。在每次连续调用以更新时,zip都会报告它有0个条目。

我做错了什么?

    public void AddFile(MemoryStream zipStream, Stream file, string fileName)
    {
        //First call to this zipStream is just an empty stream
        var zip = ZipFile.Create(zipStream);

        zip.BeginUpdate();
        zip.Add(new ZipDataSource(file), fileName);
        zip.CommitUpdate();
        zip.IsStreamOwner = false;
        zip.Close();

        zipStream.Position = 0;
    }

    public Stream GetFile(Stream zipStream, string pathAndName)
    {
        var zip = ZipFile.Create(zipStream);
        zip.IsStreamOwner = false;

        foreach (ZipEntry hi in zip) //count is 0
        {

        }
        var entry = zip.GetEntry(pathAndName);

        return entry == null ? null : zip.GetInputStream(entry);
    }

自定义数据源

        public class ZipDataSource : IStaticDataSource
        {
        private Stream _stream;

        public ZipDataSource(Stream stream)
        {
            _stream = stream;
        }

        public Stream GetSource()
        {
            _stream.Position = 0;
            return _stream;
        }

1 个答案:

答案 0 :(得分:0)

ZipFile.Create(zipStream)不仅仅是一个方便的静态访问器,就像任何人想象的那样。如果你要使用它,那么只有在你第一次创建拉链时才使用它。打开现有zip时,您需要使用var zip = new ZipFile(zipStream)

我个人在过去曾经遇到过很多关于这个库的问题,并且建议任何人都在寻找一个好的zip库来选择icsharpziplib以外的其他东西...... API很简单。