Не може да се извлече .zip файл. Изключение за получаване на невалидни данни

Имам много голям 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 и как да оправя ли това? Всяка помощ ще бъде високо оценена.


person user2954602    schedule 05.11.2013    source източник


Отговори (1)


c# не поддържа разширението .zip64.

колко голям е вашият zip файл, защото ако е под 4GiB, преименувайте го на .zip и трябва да работи добре, ако е по-голям от това, вижте това

http://dotnetzip.codeplex.com/

За да промените разширението на файла

  1. Отворете Windows Explorer и натиснете Alt + V
  2. След това отидете на инструменти и след това на опции за папка и се уверете, че квадратчето за скриване на разширения за известни типове файлове е премахнато и щракнете върху Приложи и ок.
  3. след това просто преименувайте файла, за да премахнете 64 от разширението, така че да е просто .zip
  4. След това щракнете върху да в подканата
  5. И тогава трябва да можете да отворите файла във вашата програма

Надявам се това да помогне

person 06needhamt    schedule 05.11.2013
comment
Това си мислех и аз, но как тогава мога да извлека zip файла в Windows Explorer? Windows Explorer не използва ли също .NET и ако windows explorer има решение, значи трябва да има такова, нали? - person user2954602; 05.11.2013
comment
тъй като windows explorer поддържа .zip64, така че няма да има проблеми с отварянето на файла, но c# не го прави - person 06needhamt; 05.11.2013
comment
за решението вижте връзката в моя отговор - person 06needhamt; 05.11.2013
comment
добре благодаря много за помощта. как да преименувам файла на .zip и да премахна разширението .zip64? - person user2954602; 05.11.2013