Como posso criar arquivos 7-Zip do meu aplicativo de console C #? Preciso extrair os arquivos usando o programa 7-Zip comum e amplamente disponível .
Aqui estão meus resultados com os exemplos fornecidos como respostas a esta pergunta
- "Descarte" para 7z.exe - esta é a abordagem mais simples e eficaz, e posso confirmar que funciona bem . Como o workmad3 menciona , só preciso garantir que o 7z.exe esteja instalado em todas as máquinas de destino, o que posso garantir.
- 7Zip na compactação de memória - refere-se à compactação de cookies "na memória" antes de enviá-los ao cliente; este método parece um tanto promissor. O tipo de retorno dos métodos de wrapper (envolvendo o SDK LZMA )
byte[]
. Quando escrevo obyte[]
array em um arquivo, não consigo extraí-lo usando 7-Zip (File.7z is not supported archive
). - Wrapper 7zSharp (encontrado no CodePlex) - envolve o 7z exe / LZMA SDK . Referenciei o projeto do meu aplicativo e ele criou alguns arquivos compactados com sucesso, mas não consegui extrair os arquivos usando o programa 7-Zip normal (
File.7z is not supported archive
). - 7Zip SDK também conhecido como LZMA SDK - acho que não sou inteligente o suficiente para descobrir como usar isso (é por isso que postei aqui) ... Qualquer exemplo de código de trabalho que demonstre a criação de um arquivo 7zip que pode ser extraído pelo programa 7zip regular?
- Interface CodeProject C # (.NET) para 7-Zip Archive DLLs - suporta apenas extração de arquivos 7zip ... Eu preciso criá-los!
- SharpZipLib - De acordo com seu FAQ , SharpZipLib não oferece suporte a 7zip.
c#
.net
compression
7zip
Seibar
fonte
fonte
Respostas:
Se você pode garantir que o aplicativo 7-zip será instalado (e no caminho) em todas as máquinas de destino, você pode descarregar chamando o aplicativo de linha de comando 7z. Não é a solução mais elegante, mas dá menos trabalho.
fonte
Exemplo de cookie EggCafe 7Zip Este é um exemplo (zipping cookie) com a DLL de 7Zip.
CodePlex Wrapper Este é um projeto de código aberto que distorce a função de compactação de 7z.
7Zip SDK O SDK oficial para 7zip (C, C ++, C #, Java) <--- Minha sugestão
Biblioteca .Net zip por SharpDevelop.net
Exemplo de CodeProject com 7zip
SharpZipLib Muitos fechamentos
fonte
SevenZipSharp é outra solução. Cria arquivos 7-zip ...
fonte
Aqui está um exemplo de trabalho completo usando o SDK SevenZip em C #.
Ele gravará e lerá arquivos 7zip padrão criados pelo aplicativo Windows 7zip.
PS. O exemplo anterior nunca iria descompactar porque nunca gravou as informações de propriedade necessárias no início do arquivo.
fonte
Eu usei o sdk.
por exemplo:
fonte
Basta instalar o 7 zip da fonte e passar o parâmetro para o método.
Obrigado. Por favor, goste da resposta.
fonte
Eu uso este código
fonte
Instale o pacote NuGet chamado
SevenZipSharp.Interop
Então:
fonte
Algumas informações adicionais de teste sobre o código @Orwellophile usando um arquivo de texto de 17,9 MB.
Usar os valores da propriedade no exemplo de código "como está" terá um impacto negativo ENORME no desempenho, leva 14,16 segundos .
Definir as propriedades para o seguinte faz o mesmo trabalho em 3,91 segundos (isto é, o arquivo terá as mesmas informações do contêiner, que é: você pode extrair e testar o arquivo com 7zip, mas não há informações do nome do arquivo)
7zip nativo 2 seg.
Fiz outro teste usando 7zip nativo e um arquivo de backup SQL de 1,2 GB (.bak)
7zip (compactação máxima): SDK LZMA de 1 minuto
(@Orwellophile com configuração de propriedade acima): 12:26 min :-(
Arquivo de saída aproximadamente do mesmo tamanho .
Então, acho que vou usar uma solução baseada no motor c / c ++, ia chamar o executável 7zip de c # ou usar squid-box / SevenZipSharp , que é um wrapper em torno do arquivo 7zip c / c ++ dll, e parece para ser o mais novo fork do SevenZipSharp. Ainda não testei o wrapper, mas espero que funcione exatamente como o 7zip nativo. Mas, com sorte, isso dará a possibilidade de compactar stream também, o que você obviamente não poderá se chamar o exe diretamente. Caso contrário, acho que não há nenhuma vantagem sobre ligar para o exe. O wrapper tem algumas dependências adicionais, portanto, não tornará seu projeto publicado "mais limpo".
A propósito, parece que a equipe do .Net Core considera a implementação do LZMA na classe system.io na versão .Core. 5, isso seria ótimo!
(Eu sei que isso é uma espécie de comentário e não uma resposta, mas para ser capaz de fornecer o snippet de código, não poderia ser um comentário)
fonte
A maneira mais fácil é trabalhar com arquivos .zip em vez de .7z e usar Dot Net Zip
Ao girar os comandos 7zip para o shell, existem outros problemas, como privilégios de usuário, tive problemas com o SevenZipSharp.
fonte
SharpCompress é, na minha opinião, uma das bibliotecas de compressão mais inteligentes que existem. Suporta LZMA (7-zip), é fácil de usar e está em desenvolvimento ativo.
Como já tem suporte para streaming LZMA, no momento em que este artigo foi escrito, infelizmente, só suportava leitura de arquivo 7-zip. MAS a escrita de arquivo está em sua lista de tarefas (consulte o leia-me). Para leitores futuros: verifique para obter o status atual aqui: https://github.com/adamhathcock/sharpcompress/blob/master/FORMATS.md
fonte