我正在尝试创建一个程序,可以根据用户输入创建一个包含文件的压缩包。
在压缩之前,我不需要这些文件被写入硬盘,因为这是不必要的。那么,如何在不实际写入硬盘的情况下创建这些文件,并将它们压缩?
我正在使用DotNetZip。
请查看文档此处,特别是名为“使用从流获取的内容创建压缩包”的示例:
using (ZipFile zip = new ZipFile())
{
ZipEntry e= zip.AddEntry("Content-From-Stream.bin", "basedirectory", StreamToRead);
e.Comment = "The content for entry in the zip file was obtained from a stream";
zip.AddFile("Readme.txt");
zip.Save(zipFileToCreate);
}
如果您的文件还没有以流格式存在,那么您需要将它们转换为流格式。您可能需要使用MemoryStream来完成此操作。
我使用SharpZipLib,但是如果DotNetZip可以针对基本的System.IO.Stream执行所有操作,那么只需提供一个MemoryStream进行写入即可。
将数据写入硬盘不应该被视为不必要的。这是错误的想法。如果没有必要在内存中完成整个压缩过程,那么通过将数据写入硬盘来避免。
相比内存,硬盘更适合存储大量数据。如果你的压缩文件大小约为1GB,你的应用程序可能会崩溃或至少导致系统变慢。如果直接将数据写入硬盘,则可以创建几个GB大小的压缩文件而不会出现问题。