根据文档记录,我很难将其付诸实践。使用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;
}
答案 0 :(得分:0)
ZipFile.Create(zipStream)
不仅仅是一个方便的静态访问器,就像任何人想象的那样。如果你要使用它,那么只有在你第一次创建拉链时才使用它。打开现有zip时,您需要使用var zip = new ZipFile(zipStream)
。
我个人在过去曾经遇到过很多关于这个库的问题,并且建议任何人都在寻找一个好的zip库来选择icsharpziplib以外的其他东西...... API很简单。