使用System.IO.Packaging.Package在内存中创建ZIP文件

时间:2018-04-18 06:55:32

标签: c# .net-4.0

目前我正试图在我的记忆中创建一个zip文件。我收集了很多文件

byte[] item1 = File.ReadAllBytes(@"C:\1.gif");
byte[] item2 = File.ReadAllBytes(@"C:\2.gif");

并且在第二步中我想将它们添加到一个zip文件并保存该zip文件

byte[] result = AddFilesToZip(new byte[][] { item1, item2 });
File.WriteAllBytes(@"C:\images.zip", result);

以下是我的方法AddFilesToZip

public static byte[] AddFilesToZip(byte[][] filesToAdd)
{
    using (System.IO.MemoryStream result = new MemoryStream())
    {
    using (System.IO.Packaging.Package zip = System.IO.Packaging.Package.Open(result, System.IO.FileMode.Create))
    {
        for (int i = 0; i < filesToAdd.Length; i++)
        {
            System.IO.Packaging.PackagePart ZipPart = zip.CreatePart(new Uri(i + ".gif"), MediaTypeNames.Application.Zip, System.IO.Packaging.CompressionOption.Normal);
            ZipPart.GetStream().Write(filesToAdd[i], 0, filesToAdd[i].Length);
        }
    }
        return result.ToArray();
    }
}

但我已经收到错误,该URI在new Uri(i + ".gif")处无效。

  

无效的URI:无法确定URI的格式。

1 个答案:

答案 0 :(得分:1)

问题似乎是你需要一个相对URI,但是Uri类不知道你正在创建什么样的Uri。

请改为尝试:

new Uri("/" + i + ".gif", UriKind.Relative)