Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

supertreta

C# - zip de ficheiros

Mensagens Recomendadas

supertreta

Boas,

Preciso de criar um array de bytes final, com o zip de diferentes colecções de bytes. Não quero gerar ficheiros durante o processo. Tenho feito o seguinte excerto de código:

__________________________________________________ ______________________________

using ICSharpCode.SharpZipLib.Zip;

(...)

FileStream tempFileStream = new FileStream(@"C:\teste.zip", FileMode.Open, FileAccess.ReadWrite, FileShare.None);

Stream compressedContents = new MemoryStream();
ZipOutputStream zipOutput = new ZipOutputStream(compressedContents);
zipOutput.SetLevel(5);

for (int i = 0; i < attachments.Count; i++) //attachments -> byte [][]
{

    ZipEntry entry = new ZipEntry(attachsNames);
    entry.DateTime = DateTime.Now;
    entry.Size = attachments.Length;
    zipOutput.PutNextEntry(entry);
    zipOutput.Write(attachments, 0, attachments.Length);

}

zipOutput.Finish();
zipOutput.Flush();

byte[] buffer = new byte[compressedContents.Length];
compressedContents.Read(buffer, 0, (int)compressedContents.Length);

tempFileStream.Write(buffer, 0, (int)compressedContents.Length);
tempFileStream.Close();

zipOutput.Close();
compressedContents.Close();

__________________________________________________ ______________________________

O ficheiro criado serve apenas para teste. Quando o tento abrir surge o erro típico de quando um ficheiro está corrompido: "can not open teste.zip as a archive".

Se a variável compressedContents for um FileStream em vez de uma memoryStream, o ficheiro de teste resultante é gerado correctamente. No entanto, só pretendo ficar com array de bytes final. Não o pretendo criar com writes e reads ao disco através ficheiros temporários..

O prob deve estar na forma como manipulo a memoryStream.. Alguma ideia?

Cumps

Supertreta

Edit M6: inserido syntax highlight no código.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
msr

Já me aconteceu uma coisa identica.

O que eu fiz foi: estava a usar um buffer de bytes com 50 "posições" e aumentei para 128. Porquê 128? Porque é um numero maior e é mais bonito :) Sinceramente não sei qual seria o problema com os 50, mas depois de ter aumentado o tamanho do buffer, passou a funcionar.

Não sei se te ajuda, mas aqui fica o testemunho.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.