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