Domanda

Sto cercando di creare un file Zip da .Net che possa essere letto dal codice Java.

Ho usato SharpZipLib per creare il file Zip ma anche se il file generato è valido secondo la funzione CheckZip della libreria #ZipLib e può essere decompresso con successo tramite WinZip o WinRar ricevo sempre un errore quando provo a decomprimerlo utilizzando Java Classe .Utils.Zip in Java.

Il problema sembra essere nell'intestazione sbagliata scritta da SharpZipLib, ho anche postato una domanda sul forum SharpDevelop ma senza risultati (vedi http://community.sharpdevelop.net/forums/t/8272.aspx per info) ma senza risultato.

Qualcuno ha un esempio di codice per comprimere un file Zip con .Net e decomprimerlo con la classe Java.Utils.Zip?

Saluti Massimo

È stato utile?

Soluzione

ho usato Libreria DotNetZip e sembra funzionare correttamente.Codice tipico:

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

Altri suggerimenti

Ho avuto lo stesso problema creando zip con SharpZipLib (ultima versione) ed estraendo con java.utils.zip.

Ecco cosa ha risolto il problema per me.Ho dovuto forzare l'esclusione dell'utilizzo di zip64:

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

s.UseZip64 = UseZip64.Off;

Non posso aiutarti con SharpZipLib, ma puoi provare a creare un file zip utilizzando Pacchetto zip classe System.IO.Packaging senza utilizzare librerie di terze parti (richiede .NET 3+).

Non vuoi usare la classe ZipPackage in .NET: non è un modello zip abbastanza standard.Ebbene lo è, ma presuppone una struttura particolare del file, con un manifest dal nome noto, e così via.ZipPackage sembra essere stato ottimizzato per documenti Office e documenti XPS.

Una libreria di terze parti, come http://www.codeplex.com/DotNetZip, è probabilmente una soluzione migliore se stai creando file ZIP per scopi generici e desideri una buona interoperabilità.

DotNetZip crea file che sono molto interoperabili con praticamente tutto, incluso java.utils.zip di Java.Ma fai attenzione all'utilizzo di funzionalità che Java non supporta, come ZIP64 o Unicode.ZIP64 è utile solo per archivi molto grandi, che Java non supporta bene in questo momento, credo.Java supporta Unicode in un modo particolare, quindi se produci un file ZIP basato su Unicode con DotNetZip, devi solo seguire alcune regole e funzionerà correttamente.

Per giudicare se si tratta davvero di un file ZIP conforme, vedere PKZIP Specifiche del formato file .ZIP.

Per quello che vale, non ho avuto problemi a utilizzare SharpZipLib per creare ZIP su un dispositivo Windows Mobile e aprirli con WinZip o la funzionalità Cartelle compresse integrata di Windows XP, e nemmeno problemi a produrre ZIP sul desktop con SharpZipLib ed elaborarli con il mio propria utility di estrazione ZIP (sostanzialmente un wrapper attorno a zlib) sul dispositivo mobile.

Ho avuto un problema simile con la decompressione dei file zippati SharpZipLib su Linux.Penso di averlo risolto (beh, ora lavoro su Linux e Mac, l'ho testato), controlla il mio post sul blog: http://igorbrejc.net/development/c/sharpziplib-making-it-work-for-linuxmac

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top