2014-07-14 63 views
0

按照文档,我很难让这个工作。使用ZipFile我想在内存中创建一个zip文件,然后能够更新它。在每次连续呼叫更新时,zip会报告它有0个条目。创建和更新zip文件

我在做什么错?

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; 
     } 

回答

0

ZipFile.Create(zipStream)不只是一个方便的静态访问像其他人想。如果您打算使用它,那么只有在您第一次创建zip文件时才使用它。打开现有的zip文件时,您需要使用var zip = new ZipFile(zipStream)

我以前在这个库中遇到过很多问题,并且会建议任何想找一个好的zip库来选择除了icsharpziplib以外的东西的人......这个API只是简单的吸引人。