Je télécharge un fichier Zip à l'aide du programme c # et j'obtiens l'erreur
at System.IO.Compression.ZipArchive.ReadEndOfCentralDirectory()
at System.IO.Compression.ZipArchive.Init(Stream stream, ZipArchiveMode mode,
Boolean leaveOpen)
at System.IO.Compression.ZipArchive..ctor(Stream stream, ZipArchiveMode mode,
Boolean leaveOpen, Encoding entryNameEncoding)
at System.IO.Compression.ZipFile.Open(String archiveFileName, ZipArchiveMode
mode, Encoding entryNameEncoding)
at System.IO.Compression.ZipFile.ExtractToDirectory(String sourceArchiveFileN
ame, String destinationDirectoryName, Encoding entryNameEncoding)
at System.IO.Compression.ZipFile.ExtractToDirectory(String sourceArchiveFileN
ame, String destinationDirectoryName)
Voici le programme
response = (HttpWebResponse)request.GetResponse();
Stream ReceiveStream = response.GetResponseStream();
byte[] buffer = new byte[1024];
FileStream outFile = new FileStream(zipFilePath, FileMode.Create);
int bytesRead;
while ((bytesRead = ReceiveStream.Read(buffer, 0, buffer.Length)) != 0)
outFile.Write(buffer, 0, bytesRead);
outFile.Close();
response.Close();
try
{
ZipFile.ExtractToDirectory(zipFilePath, destnDirectoryName);
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
Console.ReadLine();
}
Je ne comprends pas l'erreur. Quelqu'un peut-il expliquer cela Merci MR
Le problème est que Unzip ne peut pas trouver la ligne de code qui signale la fin de l'archive, donc soit:
L'archive est corrompue.
Ce n'est pas une archive .Zip.
L'ouverture du fichier avec votre utilitaire Zip préféré vous dira lequel il pourrait s'agir.
De votre ancienne question que vous avez supprimée.
J'obtiens System.IO.InvalidDataException: la fin de l'enregistrement du répertoire central est introuvable.
Cela signifie très probablement que le fichier que vous transmettez est mal formé et que le Zip échoue. Puisque vous avez déjà le fichier outfile
sur le disque dur, je recommanderais d'essayer d'ouvrir ce fichier avec des fenêtres intégrées dans Zip extractor et de voir si cela fonctionne. S'il échoue, le problème ne vient pas de votre code de décompression mais des données que le serveur vous envoie.
J'ai le même problème, mais dans mon cas, le problème concerne la partie compression et non la décompression.
Pendant la compression, j'ai également besoin d'utiliser le statament "Utilisation" avec le Stream et les objets ZipArchive. Le statament "Utilisation" fermera correctement l'archive et je pourrai la décompresser sans aucun problème.
Le code de travail dans mon cas dans VB.Net:
Using zipSteramToCreate As New MemoryStream()
Using archive As New ZipArchive(zipSteramToCreate, ZipArchiveMode.Create)
' Add entry...
End Using
' Return the Zip byte array for example:
Return zipSteramToCreate.ToArray
End Using
J'ai rencontré ce même problème. Il existe de nombreux types de compression, .Zip n'étant qu'un des types. Regardez et assurez-vous que vous n'essayez pas de "décompresser" un fichier .rar ou similaire.
Je viens de rencontrer ce fil lorsque j'ai eu la même erreur à partir d'un script PowerShell appelant la méthode Net.WebClient DownloadFile.
Dans mon cas, le problème était que le serveur Web n'a pas pu fournir le fichier Zip demandé et a plutôt fourni une page HTML contenant un message d'erreur, qui ne pouvait évidemment pas être décompressé.
Au lieu de cela, j'ai créé un gestionnaire d'exceptions pour extraire et présenter le "vrai" message d'erreur.
Pourrait être utile à quelqu'un d'autre. J'ai traité cela en ajoutant une exception à mon code, qui ensuite:
J'ai utilisé la bibliothèque SharpCompress C # .net disponible via le gestionnaire de paquets Nuget, cela a résolu mon objectif de décompresser.