Имам много голям zip файл, който съдържа други zip файлове вътре в него. Искам моята C# програма да може да разпознае, че файлът е 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 Explorer. Не съм сигурен дали фактът, че е голям zip файл с разширение zip64, има нещо общо с това, но какъвто и да е проблемът, защо не получавам проблема, когато отварям и извличам в windows explorer и как да оправя ли това? Всяка помощ ще бъде високо оценена.