Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Renanbg

Erro descompactar Zlib

Recommended Posts

Pessoal,

alguem ja teve esse problema com a zlib no delphi 2010?

 

Consigo compactar normalmente, mas ao descompactar os nomes dos arquivos que foram compactados mudam , assim como a extensão.

 

No delphi 7 tava tudo ok. Será que devo atualizar a Zlib?

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas está mudando somente o nomes dos arquivos ou eles estão sendo corrompidos também (o conteúdo está sendo alterado)?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eles mudam a extensão e nome. Chegam a ficar com caracteres chineses em alguns casos.

 

exemplo: Compactei uma foto com o nome: foto.jpg e ao descompactar ficou como: foto

 

Depois tentei compactar varias fotos e ao descompactar da esse erro:

 

Imagem Postada

 

esta programado para descompactar em c:\backup\arquivos e olha o que o codigo tenta fazer. O nome do arquivo que deu erro era Desert.jpg.

 

Segue o codigo que uso.

 

No botão descompactar

 

OpenDialog1.Execute;
  if (Trim(OpenDialog1.FileName) <> '') and (OpenDialog1.Files.Count > 0) then
  DecompressFiles(OpenDialog1.FileName,'C:\Backup\Arquivos\');

e a descompactação

 

procedure TForm1.DecompressionProgress(Sender: TObject);
begin
  Label2.Caption := CurrToStrF(((Sender as TDecompressionStream).Position * 100) / nMax,ffNumber,0);
  Application.ProcessMessages;
end;

// Rotina que Descompacta
procedure TForm1.DecompressFiles(FileName, Destination: String);
var
  InFile, OutFile: TFilestream;
  Decompr: TDecompressionStream;
  S: String;
  I,L,C: Integer;
begin
  Destination := IncludeTrailingPathDelimiter(Destination);
  InFile      := TFileStream.Create(FileName,fmOpenRead);
  try
    { Pega o número de arquivos }
    InFile.Read(C,SizeOf(C));
    for I := 1 to C do
    begin
      Label1.Caption := 'Descomprimindo: '+IntToStr(I)+' de '+IntToStr(C);
      { Pega o nome do arquivo }
      InFile.Read(L,SizeOf(L));
      SetLength(S,L);
      InFile.Read(S[1],L);
      { Lê o tamanho do arquivo }
      InFile.Read(L,SizeOf(L));
      { Progresso do arquivo atual. Não se pode ler Decompr.Size, dá erro, por isso utilizamos L }
      nMax := L;
      { Descompacta e grava o arquivo no disco }
      S := Destination+S; // Adiciona o caminho do arquivo
      OutFile := TFileStream.Create(S,fmCreate or fmShareExclusive); //nesse ponto da o erro, mas apenas no delphi 2010
      Decompr := TDecompressionStream.Create(InFile);
      Decompr.OnProgress := DecompressionProgress;
      try
        OutFile.CopyFrom(Decompr,L);
      finally
        OutFile.Free;
        Decompr.Free;
      end;
    end;
    Label1.Caption := '';
    Label2.Caption := '';
  finally
    InFile.Free;
  end;
end;

Agradeço qualquer dica.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja que ali você so passou a pasta do arquivo, precisa passar o nome do arquivo também.

 

:D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Onde você diz?

 

se for na tela de erro, ta certo...o sistema deve descompactar na pasta arquivos, mas por algum motivo no delphi 2010 ele não é capaz e da esse erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É que ele está dizendo que não possível criar o "arquivo"... a principio ele esta tentando criar um arquivo e não uma pasta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Teoricamente sim. Ele precisa extrair os arquivos e pra isso cria-los.

 

O ruim é que funciona até o delphi 2007 com certeza. No 2010 que ele da erro.

 

muito estranho

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu preciso muito que o zLib funcione!

eu estou usando o Delphi 2010, e não consigo fazer funcionar de jeito nenhum...

estou usando o código do colega acima, e está dando esse erro:

 

Cannot create file "C:\". O Sistema não pode encontrar o caminho especificado.

 

e o delphi 2010 acusa essa linha:

 

OutFile := TFileStream.Create(S,fmCreate or fmShareExclusive);

 

eu não consegui instalar o ZipMaster, muito menos usa-lo, eu não sei mexer muito com isso

e o único algoritmo bunitinho que achei (aqui nesse post) ta dando erro no Delphi 2010... alguem pode ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu preciso muito que o zLib funcione!

eu estou usando o Delphi 2010, e não consigo fazer funcionar de jeito nenhum...

estou usando o código do colega acima, e está dando esse erro:

 

Cannot create file "C:\". O Sistema não pode encontrar o caminho especificado.

 

e o delphi 2010 acusa essa linha:

 

OutFile := TFileStream.Create(S,fmCreate or fmShareExclusive);

 

eu não consegui instalar o ZipMaster, muito menos usa-lo, eu não sei mexer muito com isso

e o único algoritmo bunitinho que achei (aqui nesse post) ta dando erro no Delphi 2010... alguem pode ajudar?

 

Declara a variável do caminho como AnsiString.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou com o mesmo erro, ainda que eu declare como AnsiString!



Inicialmente o erro já ocorre na leitura do primeiro nome de arquivo, onde:

 

SetLength(S,L); //O length é o certo, no entando o valor que vai pra "S" está errado

 

 

logo após executa:

InFile.Read(S[1],L); //ai parece estar pegando do lugar certo no entando faltando a extenção,                      //no entanto ele sobrepõem oq estáva armazenado em "S"                      //Ex: S = 'uNomeArquivos.pa'(pegou nome errado) e substitui errado tmb pelo                      //nome certo (nome certo = 'projeto1'), substituição S = 'projeto1uivos.pa'

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.