Pergunta

Eu estou tentando criar um arquivo Zip a partir de .Net que podem ser lidos a partir de código Java.

Eu usei SharpZipLib para criar o arquivo Zip, mas também se o arquivo gerado é válido de acordo com o CheckZip função da #ZipLib biblioteca e pode ser descompactado através WinZip ou WinRar eu sempre recebo um erro ao tentar descompactá-lo usando o Java.Utils.Zip classe em Java.

O problema parece estar no cabeçalho errado escrito por SharpZipLib, eu também postei uma pergunta no SharpDevelop fórum, mas sem resultados (ver http://community.sharpdevelop.net/forums/t/8272.aspx para informações), mas sem resultado.

Tem alguém um exemplo de código de compressão de um arquivo Zip com .Net e de comprimi-lo com o Java.Utils.Zip classe?

Matéria Massimo

Foi útil?

Solução

Eu tenho usado DotNetZip biblioteca e parece funcionar corretamente.Típico de código:

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

Outras dicas

Eu tive o mesmo problema a criação de zíperes com SharpZipLib (versão mais recente) e extração com java.utils.zip.

Aqui está o que resolveu o problema para mim.Eu tive que forçar a exclusão dos zip64 uso:

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

s.UseZip64 = UseZip64.Off;

Não posso ajudar com SharpZipLib, mas você pode tentar criar o arquivo zip usando ZipPackage classe Do sistema.IO.Embalagem sem o uso de 3ª parte bibliotecas (requer .NET 3+).

Você não vai querer usar o ZipPackage classe .NET - não é bem um padrão zip modelo.Bem, é, mas supõe uma estrutura particular no arquivo, com um manifesto com um nome bem conhecido, e assim por diante.ZipPackage parece ter sido otimizado para documentos do Office e XPS docs.

Uma biblioteca de terceiros, como http://www.codeplex.com/DotNetZip, é, provavelmente, a melhor aposta se você está fazendo uso geral de arquivos ZIP e deseja boa interoperabilidade.

DotNetZip cria ficheiros que são muito interoperável com praticamente tudo, incluindo Java java.utils.zip.Mas tenha cuidado com a utilização de recursos que o Java não suporta, como ZIP64 ou Unicode.ZIP64 é útil apenas para grandes arquivos, o que o Java não suporta muito bem a esse tempo, eu acho.Java suporta Unicode em uma forma particular, de modo a se produzir um baseado em Unicode arquivo ZIP com DotNetZip, você apenas tem que seguir algumas regras e ele vai funcionar bem.

Para julgar se é realmente um conformes arquivo ZIP, consulte o PKZIP do .Especificação de Formato de Arquivo ZIP.

Por que vale a pena eu ter tido qualquer dificuldade em SharpZipLib para criar Fechos em um dispositivo Windows Mobile e abri-los com o WinZip ou o Windows XP built-in funcionalidade Pastas Comprimidas, e também sem problemas, produzindo Zíperes na área de trabalho com SharpZipLib e processá-las com o meu próprio ZIP utilitário de extração (basicamente um wrapper em torno de zlib) no dispositivo móvel.

Eu tive um problema semelhante com a descompactação SharpZipLib-arquivos zipados no Linux.Eu acho que eu resolvi (bem, eu funciona em Linux e Mac, agora, eu testei), confira o meu blog: http://igorbrejc.net/development/c/sharpziplib-making-it-work-for-linuxmac

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top