【问题标题】:Creating and updating a zipfile创建和更新 zipfile
【发布时间】:2014-07-14 23:50:12
【问题描述】:

根据文档,我很难让它发挥作用。使用 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;
        }

【问题讨论】:

    标签: c# sharpziplib


    【解决方案1】:

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

    我个人过去在使用这个库时遇到过很多问题,我建议任何寻找好的 zip 库的人选择 icsharpziplib 以外的其他东西……API 简直糟透了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-22
      • 2013-09-21
      相关资源
      最近更新 更多