Eu tenho certeza que isso não é uma cópia, então tenha paciência comigo por apenas um minuto.
Como posso zipar programaticamente (C #) um arquivo (no Windows) sem usar bibliotecas de terceiros? Eu preciso de uma chamada nativa do Windows ou algo assim; Realmente não gosto da idéia de iniciar um processo, mas irei se for absolutamente necessário. Uma ligação PInovke seria muito melhor.
Caso contrário, deixe-me dizer o que realmente estou tentando realizar: preciso da capacidade de permitir que um usuário baixe uma coleção de documentos em uma única solicitação. Alguma idéia de como fazer isso?
c#
compression
zip
download
Esteban Araya
fonte
fonte
Respostas:
Você está usando o .NET 3.5? Você pode usar a
ZipPackage
classe e classes relacionadas. É mais do que apenas compactar uma lista de arquivos, porque deseja um tipo MIME para cada arquivo adicionado. Pode fazer o que você quiser.Atualmente, estou usando essas classes para um problema semelhante para arquivar vários arquivos relacionados em um único arquivo para download. Usamos uma extensão de arquivo para associar o arquivo de download ao nosso aplicativo de desktop. Um pequeno problema que encontramos foi que não é possível usar apenas uma ferramenta de terceiros como o 7-zip para criar os arquivos zip, porque o código do lado do cliente não pode abri-lo - o ZipPackage adiciona um arquivo oculto que descreve o tipo de conteúdo do arquivo zip. cada arquivo de componente e não pode abrir um arquivo zip se esse arquivo de tipo de conteúdo estiver ausente.
fonte
Se você estiver usando o 4.5+ Framework, agora existem as classes ZipArchive e ZipFile .
Você precisa adicionar referências a:
Para o .NET Core de destino net46, você precisa adicionar dependências para
Exemplo project.json:
Para o .NET Core 2.0, basta adicionar uma instrução simple using:
fonte
Eu estava na mesma situação, desejando .NET em vez de uma biblioteca de terceiros. Como outro pôster mencionado acima, o simples uso da classe ZipPackage (introduzida no .NET 3.5) não é suficiente. Há um arquivo adicional que DEVE ser incluído no arquivo para que o ZipPackage funcione. Se esse arquivo for adicionado, o pacote ZIP resultante poderá ser aberto diretamente no Windows Explorer - não há problema.
Tudo o que você precisa fazer é adicionar o arquivo [Content_Types] .xml à raiz do arquivo morto com um nó "Padrão" para cada extensão de arquivo que você deseja incluir. Uma vez adicionado, eu poderia procurar o pacote no Windows Explorer ou descomprimir programaticamente e ler seu conteúdo.
Mais informações sobre o arquivo [Content_Types] .xml podem ser encontradas aqui: http://msdn.microsoft.com/en-us/magazine/cc163372.aspx
Aqui está uma amostra do arquivo [Content_Types] .xml (deve ser nomeado exatamente):
E o C # para criar um arquivo ZIP:
Nota:
fonte
fonte
Com base na resposta de Simon McKenzie a esta pergunta , sugiro usar um par de métodos como este:
fonte
Parece que o Windows pode permitir que você faça isso ...
Infelizmente, acho que você não conseguirá iniciar um processo separado, a menos que vá para um componente de terceiros.
fonte
Adicione estas 4 funções ao seu projeto:
E use-os assim:
fonte