C # - Извлечение содержимого сжатого файла без сохранения - PullRequest
0 голосов
/ 04 октября 2018

У меня есть сжатый файл (.osz), хранящийся в S3 Bucket, который содержит файл .os, который мне нужен для чтения содержимого.Мне нужно иметь возможность извлекать / распаковывать и читать содержимое сжатого файла без загрузки файла непосредственно на ПК по соображениям безопасности.

Я могу получить сжатый файл (.osz), используяURL-адрес его пути S3 Bucket.Затем с помощью 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» и необходимости где-то сохранить извлеченный файл?

Спасибоза вашу помощь.

...