У меня есть сжатый файл (.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» и необходимости где-то сохранить извлеченный файл?
Спасибоза вашу помощь.