У меня есть очень большой zip-файл, который содержит другие zip-файлы внутри него. Я хочу, чтобы моя программа на С# могла распознавать, что файл является zip-файлом, и если это zip-файл, то извлекать его в папку в том же месте, что и zip-файл. Мой код здесь:
private void Unzip(OpenFileDialog tvZipOpen)
{
string zipFile = tvZipOpen.FileName; // file to unzip
int i = zipFile.LastIndexOf(".zip");
string targetDirectory = zipFile.Substring(0, i); // location to extract to
using (ZipArchive zip = ZipFile.OpenRead(zipFile))
{
zip.ExtractToDirectory(targetDirectory);
}
tvZipOpen.InitialDirectory = targetDirectory;
tvZipOpen.ShowDialog();
}
Я использую класс ZipFile из .NET 4.5 и вызываю этот метод здесь:
if (tvOpen.ShowDialog() == DialogResult.OK)
{
while (tvOpen.FileName.ToLower().EndsWith(".zip"))
{
Unzip(tvOpen);
}
return tvOpen.FileNames;
}
Код отлично работает для извлечения первого zip-файла, но когда я пытаюсь извлечь второй zip-файл, я получаю InvalidDataException, в котором говорится, что заголовок локального файла поврежден. Однако я не думаю, что он поврежден, потому что я могу отлично открывать и извлекать zip-файлы в проводнике Windows. Я не уверен, имеет ли к этому какое-либо отношение тот факт, что это большой zip-файл с расширением zip64, но какова бы ни была проблема, почему у меня не возникает проблемы, когда я открываю и извлекаю в проводнике Windows и как мне исправить это? Любая помощь будет принята с благодарностью.