Fórum Zipmaster - Manter a estrutura de pastas #383813

17/08/2010

0

Ola...

Estou utilizando o componente ZipMaster e me deparei com o seguinte problema...

Ao adicionar as opções ( "AddOptions  := AddOptions + [AddDirNames, AddRecurseDirs]" ), para manter a estrutura das pastas, o arquivo zipado aparece representado com a estrutura de pastas a partir do diretório raiz "C", no caso:
"C:\Arquivos de programas\Temp\Teste\Teste.zip".

Preciso que seja mantida somente a estrutura a partir da pasta zipada e não a partir da raiz. Por exemplo se eu zipar a pasta "Temp" a aetrutura deveria ser:
"Temp\Teste\Teste.zip" ou "Teste\Teste.zip" e não "C:\Arquivos de programas\Temp\Teste\Teste.zip".

Alguém teria alguma idéia de como fazer isso?

Estou utilizando o ZipMaster 1.9 e Delphi 2007.

Atenciosamente
Sérgio
Sérgio Saibel

Sérgio Saibel

Responder

Post mais votado

23/05/2012

Sei que provavelmente você não precise mais desta solução, pelo tempo que passou desde que seu post foi aberto, mas como também precisei disso e não encontrei em local algum na internet, vou postar aqui para o caso de outra pessoa ter o mesmo problema.

Para resolver isto é simples na verdade, você deverá marcar no seu TZipMaster em AddOptions os itens AddDirNames e AddRecurseDirs e então definir o RootDir do seu TZipMaster e utilizar caminhos relativos (ao invés de absolutos) para indexar seus arquivos no zip gerado. Mais ou menos assim:

Zip.RootDir := C:\Arquivos de Programas\Seu programa\temp\; //Caminho da pasta onde estarão os arquivos a serem inseridos no zip.
Zip.ZipFileName := zips\Teste.zip;
Zip.FSpecArgs.Add(diretorio1\);
Zip.FSpecArgs.Add(diretorio2\);
Zip.Add();


No exemplo acima, Zip é o nome dado ao seu e TZipMaster, e o arquivo compactado final estará da seguinte forma:

..
diretorio1/
diretorio2/


Sendo que nos diretórios do exemplo acima estarão os arquivos que estavam contidos respectivamente em C:\Arquivos de Programas\Seu programa\temp\diretorio1 e C:\Arquivos de Programas\Seu programa\temp\diretorio2

Eduardo Broering

Eduardo Broering
Responder

Gostei + 1

Mais Posts

23/05/2012

Sérgio Saibel

Ola Eduardo...

Realmente não é que não nececitasse mais desta informação, mas não estou mais trabalhando com este componente, mesmo assim é legal ver que as pessoas ainda compartilham conhecimentos.

Se você trabalha com este componente cuidado com o caminho que você informar, pois se a pasta for no primeiro nível após a raiz(c:\pastaPrimeiroNivel) e estiver vazia pode dar problema, pois o zipmaster compactará o seu sistema operacional.

De qualquer forma obrigado.
Responder

Gostei + 0

03/07/2019

Wilson Rabelo

Sei que provavelmente você não precise mais desta solução, pelo tempo que passou desde que seu post foi aberto, mas como também precisei disso e não encontrei em local algum na internet, vou postar aqui para o caso de outra pessoa ter o mesmo problema.

Para resolver isto é simples na verdade, você deverá marcar no seu TZipMaster em AddOptions os itens AddDirNames e AddRecurseDirs e então definir o RootDir do seu TZipMaster e utilizar caminhos relativos (ao invés de absolutos) para indexar seus arquivos no zip gerado. Mais ou menos assim:

Zip.RootDir := C:\\Arquivos de Programas\\Seu programa\\temp\\; //Caminho da pasta onde estarão os arquivos a serem inseridos no zip.
Zip.ZipFileName := zips\\Teste.zip;
Zip.FSpecArgs.Add(diretorio1\\);
Zip.FSpecArgs.Add(diretorio2\\);
Zip.Add();


No exemplo acima, Zip é o nome dado ao seu e TZipMaster, e o arquivo compactado final estará da seguinte forma:

..
diretorio1/
diretorio2/


Sendo que nos diretórios do exemplo acima estarão os arquivos que estavam contidos respectivamente em C:\\Arquivos de Programas\\Seu programa\\temp\\diretorio1 e C:\\Arquivos de Programas\\Seu programa\\temp\\diretorio2


Obrigado! Me ajudou muito.
Segue como fiz.

try
ZipMastSAT := TZipMaster.Create(nil);
ZipMastSAT.ZipFileName := S;
ZipMastSAT.AddOptions := ZipMastSAT.AddOptions + [AddDirNames, AddRecurseDirs, AddEmptyDirs];

ZipMastSAT.FSpecArgs.Clear;
ZipMastSAT.RootDir := 'C:\\Diretorio';
ZipMastSAT.FSpecArgs.Add('\\subdir01\\*.*');
ZipMastSAT.FSpecArgs.Add(\\subdir02\\*.*');
ZipMastSAT.Add;

finally
ZipMastSAT.Free;
end;

Obrigado pela preocupação. Realmente nao achei na net
Responder

Gostei + 1

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar