Aide à la création de fichiers Zip à partir de .Net et à leur lecture à partir de Java

StackOverflow https://stackoverflow.com/questions/71000

  •  09-06-2019
  •  | 
  •  

Question

J'essaie de créer un fichier Zip à partir de .Net pouvant être lu à partir de code Java.

J'ai utilisé SharpZipLib pour créer le fichier Zip, mais également si le fichier généré est valide conformément à la fonction CheckZip de la bibliothèque #ZipLib et peut être décompressé avec succès via WinZip ou WinRar. Une erreur est toujours commise lors de la tentative de décompression. en utilisant la classe Java.Utils.Zip en Java.

Le problème semble être dans le mauvais en-tête écrit par SharpZipLib. J'ai également posté une question sur le forum SharpDevelop mais aucun résultat (voir http://community.sharpdevelop.net/forums/t/8272.aspx pour obtenir des informations), mais sans résultat.

Quelqu'un a-t-il un exemple de code pour compresser un fichier Zip avec .Net et le décompresser avec la classe Java.Utils.Zip?

Cordialement Massimo

Était-ce utile?

La solution

J'ai utilisé la bibliothèque DotNetZip et elle semble fonctionner correctement. Code typique:

using (ZipFile zipFile = new ZipFile())
{
  zipFile.AddDirectory(sourceFolderPath);
  zipFile.Save(archiveFolderName);
}

Autres conseils

J'ai eu le même problème lors de la création de zips avec SharpZipLib (dernière version) et d’extraction avec java.utils.zip.

Voici ce qui a résolu le problème pour moi. J'ai dû forcer l'exclusion de l'utilisation de zip64:

ZipOutputStream s = new ZipOutputStream(File.Create(someZipFileName))

s.UseZip64 = UseZip64.Off;

Vous ne pouvez pas vous aider avec SharpZipLib, mais vous pouvez essayer de créer un fichier zip avec ZipPackage , classe Système .IO.Packaging sans utiliser de bibliothèques tierces (nécessite .NET 3 +).

Vous ne voulez pas utiliser la classe ZipPackage dans .NET - ce n'est pas un modèle zip tout à fait standard. C'est vrai, mais cela suppose une structure particulière dans le fichier, avec un manifeste avec un nom connu, etc. ZipPackage semble avoir été optimisé pour les documents Office et XPS.

Une bibliothèque tierce, telle que http://www.codeplex.com/DotNetZip , est probablement un meilleur choix si vous créez des fichiers ZIP à usage général et souhaitez une bonne interopérabilité.

DotNetZip crée des fichiers très interopérables avec à peu près tout, y compris java.utils.zip, de Java. Mais soyez prudent lorsque vous utilisez des fonctionnalités non supportées par Java, telles que ZIP64 ou Unicode. ZIP64 n'est utile que pour les très grandes archives, que Java ne supporte pas bien pour le moment, je pense. Java supporte l'Unicode d'une manière particulière, donc si vous produisez un fichier ZIP basé sur Unicode avec DotNetZip, il vous suffit de suivre quelques règles et tout fonctionnera correctement.

Pour savoir s'il s'agit vraiment d'un fichier ZIP conforme, consultez la section du format de fichier .ZIP de PKZIP. .

En ce qui me concerne, je n'ai eu aucun problème à utiliser SharpZipLib pour créer des fichiers ZIP sur un appareil Windows Mobile et à les ouvrir avec la fonction Dossiers compressés intégrée de WinZip ou de Windows XP, et à créer des fichiers ZIP sur le bureau avec SharpZipLib et à les traiter. les avec mon propre utilitaire d’extraction ZIP (essentiellement un wrapper autour de zlib) sur le périphérique mobile.

J'ai eu un problème similaire avec la décompression des fichiers compressés SharpZipLib sous Linux. Je pense que je l'ai résolu (enfin, je travaille sur Linux et Mac maintenant, je l'ai testé), consultez mon article de blog: http://igorbrejc.net/development/c/sharpziplib-making-it-work-for-linuxmac

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top