使用 System.IO.Packaging.Package 在内存中创建 ZIP 文件
Creating a ZIP file in memory with System.IO.Packaging.Package
目前我正在尝试在我的记忆中创建一个 zip 文件。我收集了很多文件
byte[] item1 = File.ReadAllBytes(@"C:.gif");
byte[] item2 = File.ReadAllBytes(@"C:.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")
无效。
Invalid URI: The format of the URI could not be determined.
问题似乎是您需要一个相对 URI,但 Uri class 不知道您正在创建哪种 URI。
试试这个:
new Uri("/" + i + ".gif", UriKind.Relative)
目前我正在尝试在我的记忆中创建一个 zip 文件。我收集了很多文件
byte[] item1 = File.ReadAllBytes(@"C:.gif");
byte[] item2 = File.ReadAllBytes(@"C:.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")
无效。
Invalid URI: The format of the URI could not be determined.
问题似乎是您需要一个相对 URI,但 Uri class 不知道您正在创建哪种 URI。
试试这个:
new Uri("/" + i + ".gif", UriKind.Relative)