ZipArchive创建无效的ZIP文件

我正在尝试从一个条目的代码创建一个新的ZIP包,并将ZIP包保存到文件中。我试图通过

类实现这一点。我正在使用以下代码创建ZIP包:

using (MemoryStream zipStream = new MemoryStream())

{

using (ZipArchive zip = new ZipArchive(zipStream, ZipArchiveMode.Create))

{

var entry = zip.CreateEntry("test.txt");

using (StreamWriter sw = new StreamWriter(entry.Open()))

{

sw.WriteLine(

"Etiam eros nunc, hendrerit nec malesuada vitae, pretium at ligula.");

}

然后我将ZIP保存到WinRT中的文件中:

        var file = await Windows.Storage.ApplicationData.Current.LocalFolder.CreateFileAsync("test.zip", CreationCollisionOption.ReplaceExisting);

zipStream.Position = 0;

using (Stream s = await file.OpenStreamForWriteAsync())

{

zipStream.CopyTo(s);

}

或在普通的.NET 4.5中:

        using (FileStream fs = new FileStream(@"C:\Temp\test.zip", FileMode.Create))

{

zipStream.Position = 0;

zipStream.CopyTo(fs);

}

然而,我无法打开Windows资源管理器,WinRAR的等产生的文件既没有(我检查了生成的文件的大小zipStream的长度相匹配,所以流本身是正确保存到文件中。)

上午我做错了什么,或者ZipArchive类有问题吗?

回答:

我在代码中发现了-回顾起来很明显的错误。必须

ZipArchive,以使其内容写入其基础流。因此,在ZipArchive的using块结束后,我不得不将流保存到文件中。

而且重要的是将其构造函数的 参数设置为true,以使其不关闭基础流。因此,这是完整的工作解决方案:

using (MemoryStream zipStream = new MemoryStream())

{

using (ZipArchive zip = new ZipArchive(zipStream, ZipArchiveMode.Create, true))

{

var entry = zip.CreateEntry("test.txt");

using (StreamWriter sw = new StreamWriter(entry.Open()))

{

sw.WriteLine(

"Etiam eros nunc, hendrerit nec malesuada vitae, pretium at ligula.");

}

}

var file = await Windows.Storage.ApplicationData.Current.LocalFolder.CreateFileAsync(

"test.zip",

CreationCollisionOption.ReplaceExisting);

zipStream.Position = 0;

using (Stream s = await file.OpenStreamForWriteAsync())

{

zipStream.CopyTo(s);

}

}

以上是 ZipArchive创建无效的ZIP文件 的全部内容, 来源链接: utcz.com/qa/431743.html

回到顶部