C#-提取压缩文件的内容而不保存

时间:2018-10-04 17:20:55

标签: c# zip extract compression ziparchive

我在S3存储桶上存储了一个压缩文件(.osz),其中包含一个.os文件,我需要读取该文件的内容。 由于安全原因,我需要能够解压缩/读取压缩文件的内容,而不必直接将文件下载到PC。

我能够使用S3存储桶路径的URL地址检索压缩文件(.osz)。然后,使用ZipArchive,我可以访问压缩文件中包含的文件。然后,可以通过使用“ ExtractToFile”功能来提取所需的文件,如下所示。但是,此函数提取文件(.os)并将其本地保存在指定的路径中。

WebClient client = new WebClient();
                byte[] bytes = client.DownloadData(OSZFilepath); // Read the .osz file contents into a byte array

                using (MemoryStream zipStream = new MemoryStream(bytes))
                {
                    // Create the zip containing the file from the stream
                    ZipArchive zip = new ZipArchive(zipStream);

                    // extract the compressed file and download the .os file contained within
                    var fileName = Guid.NewGuid().ToString() + ".OS";
                    var baseDirectory = Environment.ExpandEnvironmentVariables(System.Web.Configuration.WebConfigurationManager.AppSettings["DataStorage"].ToString());
                    zip.Entries[0].ExtractToFile(Path.Combine(baseDirectory, "ProjectFiles", fileName));

尽管此提取的文件可以由我的程序成功读取和导入,但是由于安全限制和程序要求,由于无法将文件保存到用户的计算机上,因此我无法使用此方法。

因此,我需要以编程方式提取/解压缩所需的文件,以便读取内容并将其以编程方式导入到我的程序中。

我尝试使用以下代码执行此操作:

ZipArchiveEntry entry = zip.GetEntry(zip.Entries[0].Name);
                    Stream stream = entry.Open();
                    StreamReader reader = new StreamReader(stream);
                    string contents = reader.ReadToEnd();

但是,当我尝试导入生成的内容时,它会引发错误,表明该内容与使用'ExtractToFile'保存的文件的内容不同。

当我将此内容另存为单独的文件并将其与使用“ ExtractToFile”保存的文件进行比较时,这一点得到确认。 “ ExtractToFile”文件大于后者。

所以我的问题是:是否有另一种方法可以成功地解压缩/压缩压缩文件并获取内容,而无需使用“ ExtractToFile”方法,而不必将提取的文件保存在某个地方?

感谢您的帮助。

0 个答案:

没有答案