11 votes

.NET Ionic.Zip : La taille des fichiers compressés ou non compressés, ou le décalage dépasse la valeur maximale.

J'ai la configuration suivante :

  • Serveur Win2008
  • Module de référence Ionic.zip
  • Un lecteur séparé pour la création des fichiers zip.
  • .NET 4.0

L'application web crée des paquets zip, à la volée, et permet au client de télécharger le paquet.

Ce système a fonctionné à merveille... jusqu'à maintenant.

Récemment, nous avons ajouté des fichiers plus volumineux (de 2 à 11 Go) qui doivent tous être regroupés dans un paquet avant d'être téléchargés vers le client. À l'origine, j'avais configuré ce système pour qu'il se déroule entièrement sur le C : (une erreur). Tout de suite, surtout avec les fichiers de grande taille, j'ai commencé à recevoir des erreurs "Il n'y a pas assez d'espace sur le disque". La première chose que j'ai faite a été de déplacer le système pour travailler sur un disque séparé de 100 Go (K :). Maintenant que ces fichiers sont mis en production sur l'intranet, je reçois toujours ces erreurs.

  1. J'ai une tâche planifiée qui nettoie le disque chaque nuit, donc même avec 100 Go, je ne devrais pas avoir d'erreurs.
  2. Le C et le K ont tous deux beaucoup de place.
  3. Je ne sais pas encore si c'est le C : (un dossier temporaire inconnu ??) ou le K : qui se remplit.
  4. MISE À JOUR - En regardant les journaux d'événements, c'est le K : qui se remplit, mais quand je le vérifie, il n'est pas plein... Je suppose donc qu'il s'agit d'un problème de fichier temporaire... ou... ?

Quelqu'un peut-il m'éclairer ou me conseiller sur la manière de résoudre ce problème ?

EDIT-----------------------

Je pense qu'il y a peut-être un lien avec la méthode de compression que j'invoque pour la taille du fichier. Je vois maintenant d'autres erreurs qui ressemblent à ça :

La taille comprimée ou non comprimée, ou le décalage dépasse la valeur maximale. Pensez à définir la propriété UseZip64WhenSaving sur l'instance de ZipFile.

J'ai essayé d'ajouter la ligne zip.CompressionMethod = Zip64Option.AsNecessary en pensant que zip64 va être nécessaire, mais ensuite j'ai eu l'erreur Unsupported compression method . Je ne sais pas trop où aller avec cette nouvelle information. Je pensais que ZipDotNet s'occuperait de tout ça.

Cela devient urgent maintenant que des utilisateurs tentent de télécharger ces fichiers. Je travaille sur un patch pour le moment comme solution de contournement.

PLUS EDIT--------------------

J'ai eu une sorte de moment de déception lorsque j'ai réalisé que le zip normal avait une limite de taille de 4 Go. Zip64 a une limite de taille BEAUCOUP plus grande.

J'ai ajouté la ligne zip.UseZip64WhenSaving = True à mon code et cela semble avoir réglé le problème. Jusqu'à présent, aucun problème.

11voto

La solution consiste à ne pas faire attention aux limites de taille des fichiers zip.

Lorsque vous utilisez DotNetZip pour zipper des fichiers de grande taille, vous obtiendrez des erreurs comme celles qui suivent dans votre codage asp.net :

  1. Il n'y a pas assez d'espace sur le disque
  2. La taille comprimée ou non comprimée, ou le décalage dépasse la valeur maximale. Pensez à définir la propriété UseZip64WhenSaving de l'instance de ZipFile.

Lorsque vous voyez ces erreurs, c'est probablement une bonne idée de modifier votre code asp en ajoutant la ligne :

[yourZipReference].UseZip64WhenSaving = Zip64Option.Always

Cela modifiera votre code afin d'enregistrer le fichier au format zip64. Il est donc conseillé de vérifier la taille des fichiers avant d'effectuer cette modification.

Il y a une autre ligne :

[yourZipReference].CompressionMethod = CompressionMethod.BZip2;// or CompressionMethod.Deflate or CompressionMethod.None

Cela amènera le module à utiliser la méthode de compression zip appropriée à la situation, mais je n'ai pas encore testé celle-ci.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X