Copia Arquivos, Compactação E Deleção Diretorio Backup de arquivos

16/01/2010

0

Bom dia,

Estou como um problema com um backup:

1) Cria e copia os arquivos para o diretorio. Ex: F:\SISTEMA\110110 (ok)
2) Compacto os arquivos do diretorio em outro diretorio. Ex: F:\SISTEMA\BACKUP\BP110110.ZIP (ok)
3) Quero deletar os arquivos assim como o primeiro diretorio criado (ERRO) -> Ele Tambem exclui os arquivos dentro do Arquivo compactado.

procedure TfrmBackupClipper.btnCopiaClick(Sender: TObject);
{:Objetivo: Copiar Arquivos ::Author: juan 29/01/2009 10:40:07 ::}
var
  wDestino, wOrigem: string;
begin
  wDestino := Trim(edtDestino.Text);
  wOrigem := Trim(edtOrigem.Text);
  iTipoEmpresa := ComboBox1.ItemIndex;
  iOrigem := Copy(wOrigem, 1, 1);
  iDestino := Copy(wDestino, 1, 1);  
  Application.ProcessMessages;
  { Copia os arquivos Origem->Destino}
  if fncCopiarArquivos(wOrigem, wDestino) then
  begin
    { Zipar os arquivos }
    if fncZipa(wDestino,Copy(wOrigem,1,Pos(wOrigem,'SISTEMA')+10)) then
    begin
      { Exclui arquivos }       
      fncDelFiles(wDestino + '\*.DB?');
      fncDelFiles(wDestino + '\*.MEM');
      fncDelFiles(wDestino + '\*.EXE');
      fncDelFiles(wDestino + '\*.NTX');
      fncDelFiles(wDestino + '\*.LOG');   
      { Exclui Diretorio }
      fncDelDiretorio( Self.Handle,wDestino);
    end;
  end;
end;


function TfrmBackupClipper.fncCopiarArquivos(pOrigem: string; pDestino: string):
  Boolean;
{: Objetivo: Copia do sistema ::Author: juan 2008.09.14 11:04:31:}
var
  // ShellAPI 269
  wFos: TSHFileOpStruct;
  wBuf: array[0..8096] of Char;
  wP: PChar;
  wDest: string;
begin  
  Result := False;
  if DirectoryExists(pDestino) then
  begin
    fncMensagem('O diretório de Destino já existe. [ ' + pDestino + ' ]', 48, -1);
    if edtDestino.CanFocus then
      edtDestino.SetFocus;
    Exit;
  end;
  FillChar(wBuf, SizeOf(wBuf), #0);
  wP := @wBuf;
  case ComboBox1.ItemIndex of
    0:
      begin
        if FileExists(pOrigem + '\EMPRESA.dbf') then
          wp := StrECopy(wp, PAnsiChar(pOrigem + '\*.db?')) + 1;
        if FileExists(pOrigem + '\VENDA.MEM') then
          wp := StrECopy(wp, PAnsiChar(pOrigem + '\*.mem')) + 1;
        if FileExists(pOrigem + '\*.LOG') then
          wp := StrECopy(wp, PAnsiChar(pOrigem + '\*.LOG')) + 1;
        if FileExists(pOrigem + '\CAIXA.EXE') then
          wp := StrECopy(wp, PAnsiChar(pOrigem + '\caixa.exe')) + 1;
        if FileExists(pOrigem + '\ADM.EXE') then
          wp := StrECopy(wp, PAnsiChar(pOrigem + '\adm.exe')) + 1;
        if FileExists(pOrigem + '\BIBLIMPE.EXE') then
          wp := StrECopy(wp, PAnsiChar(pOrigem + '\biblimpe.exe')) + 1;
        if FileExists(pOrigem + '\ACERTO.EXE') then
          wp := StrECopy(wp, PAnsiChar(pOrigem + '\acerto.exe')) + 1;
        if FileExists(pOrigem + '\COMPANY.EXE') then
          wp := StrECopy(wp, PAnsiChar(pOrigem + '\company.exe')) + 1;
        if FileExists(pOrigem + '\TABELAS.EXE') then
          wp := StrECopy(wp, PAnsiChar(pOrigem + '\tabelas.exe')) + 1;
      end;
    1:
      begin
        wp := StrECopy(wp, PAnsiChar(pOrigem + '\*.db?')) + 1;
        wp := StrECopy(wp, PAnsiChar(pOrigem + '\*.mem')) + 1;
        wp := StrECopy(wp, PAnsiChar(pOrigem + '\*.LOG')) + 1;
        wp := StrECopy(wp, PAnsiChar(pOrigem + '\ELETRICA.exe')) + 1;
      end;
    2:
      begin
        if FileExists(pOrigem + '\EMPRESA.dbf') then
          wp := StrECopy(wp, PAnsiChar(pOrigem + '\*.db?')) + 1;
        if FileExists(pOrigem + '\VENDA.MEM') then
          wp := StrECopy(wp, PAnsiChar(pOrigem + '\*.mem')) + 1;
        if FileExists(pOrigem + '\*.LOG') then
          wp := StrECopy(wp, PAnsiChar(pOrigem + '\*.LOG')) + 1;
        if FileExists(pOrigem + '\REST.exe') then
          wp := StrECopy(wp, PAnsiChar(pOrigem + '\REST.exe')) + 1;
      end;
  end;
  if Empty(wBuf) then
  begin
    fncMensagem('Sem dados para copiar. Verifique tente novamente', 48, -1);
    Abort;
  end;
  wDest := pDestino;
 { COPIA-ORIGEM-DESTINO preenche a estrutura }
  FillChar(wFos, SizeOf(wFos), #0);
  with wFos do
  begin
    Wnd := Application.Handle;
    wFunc := FO_COPY; { LongWord }
    pFrom := @wBuf;
    pTo := pChar(wDest);
    fFlags := 0;
  end;
  if ((SHFileOperation(wFos) <> 0) or (wFos.fAnyOperationsAborted <> False)) then
  begin
    fncMensagem('Operação de copia, cancelada', 48, -1);
    CloseHandle(wFos.Wnd); { Libera os Handles }
    Exit;
  end;
  Application.ProcessMessages;
  ShFreeNameMappings(GlobalHandle(wFos.hNameMappings));
  CloseHandle(wFos.Wnd); { Libera os Handles }
  Result := True;
end;


function fncDelFiles(vMasc: string): Boolean;
{$ENDREGION}
{Apaga arquivos usando mascaras tipo: c:\Temp\*.zip, c:\Temp\*.*
 Obs: Requer o Path dos arquivos a serem deletados}
var
  iSearchRec: TSearchRec;
begin
  try
    //FindFirst(vMasc, faArchive, iSearchRec);
    Result := (FindFirst(vMasc, faAnyFile, iSearchRec) = 0);
    repeat
      Result := DeleteFile(ExtractFilePAth(vMasc) + iSearchRec.Name);
    until FindNext(iSearchRec) <> 0;
  finally
    FindClose(iSearchRec);
  end;
end;


procedure fncDelDiretorio(hHandle: THandle; const sPath: string);
{:Objetivo: Deleta Diretorio  ::Author: juan 11/01/2010 06:04:26 ::}
var
  OpStruc: TSHFileOpStruct;
  FromBuffer, ToBuffer: array[0..128] of Char;
begin
  fillChar(OpStruc, Sizeof(OpStruc), 0);
  FillChar(FromBuffer, Sizeof(FromBuffer), 0);
  FillChar(ToBuffer, Sizeof(ToBuffer), 0);
  StrPCopy(FromBuffer, sPath);
  with OpStruc do
  begin
    Wnd := hHandle;
    wFunc := FO_DELETE;
    pFrom := @FromBuffer;
    pTo := @ToBuffer;
    fFlags := FOF_NOCONFIRMATION;
    fAnyOperationsAborted := False;
    hNameMappings := nil;
//lpszProgressTitle:=nil;
  end;
  ShFileOperation(OpStruc);
end;



Agradeço, se alguem puder mostrar onde estou a errar.






Adolfo Lopes

Adolfo Lopes

Responder

Posts

16/01/2010

Perivaldo Martins

Nobre colega, para que servem essas duas variáveis?
iOrigem
  iDestino  
...
Suponhamos que:
wOrigem seja: C:\Teste\Estoque
wDestino seja: C:\Teste\Estoque\Backup
...
Você copia os arquivos, conforme seu código abaixo.

  { Copia os arquivos Origem->Destino}
  if fncCopiarArquivos(wOrigem, wDestino) then
  begin
Agora vc zipa os arquivos...
    { Zipar os arquivos }
    if fncZipa(wDestino,Copy(wOrigem,1,Pos(wOrigem,'SISTEMA')+10)) then
Depois dos arquivos zipados vc deleta os que estavam na pasta Destino.
    begin
      { Exclui arquivos }      
      fncDelFiles(wDestino + '\*.DB?');
      fncDelFiles(wDestino + '\*.MEM');
      fncDelFiles(wDestino + '\*.EXE');
      fncDelFiles(wDestino + '\*.NTX');
      fncDelFiles(wDestino + '\*.LOG');  

Aqui vc deleta o diretório destino.

      { Exclui Diretorio }
      fncDelDiretorio( Self.Handle,wDestino);
    end;
  end;
Não encontrei em seu código nenhuma linha que mova o arquivo zipado para outro lugar ou
mesmo copie ele para outra pasta.

Talvez seja isso, reveja seu código.

Se não for o que eu penso, desculpe-me, olhei superficialmente seu código sem testá-lo antes de postar.

Boa sorte e bons códigos.

Responder

16/01/2010

Adolfo Lopes

Boa tarde, Perivaldo Martins primeiro agradeço pela resposta.

1) iOrigem,  iDestino  -> para gravar em um arquivo TIniFile.
2) "Não encontrei em seu código nenhuma linha que mova o arquivo zipado para outro lugar ou mesmo copie ele para outra pasta." Realmente esqueci de postar a function

Function TfrmBackupClipper.fncZipa(pDest: string; pOrigem: string): Boolean;
{::Compactar, criar diretorio e copiar ::Autor: juan 29/09/2009 22:36:00 ::}
var
  wdata, wBackup: string;
begin
  Result := False;
  Application.ProcessMessages;
  try
    // Formata Data
    ShortDateFormat := 'dd/mm/yy';
    wData := AlteraDataFormato(DateToStr(date), '');
    // cria o diretorio se nao sexiste
    //wBackup := pDest + '\BACKUP';
    wBackup := pOrigem + '\BACKUP';
    if not DirectoryExists(wBackup) then
      ForceDirectories(wBackup);
    //wBackup := pDest + '\BACKUP\BP' + wData + '.ZIP';
    wBackup := pOrigem + '\BACKUP\BP' + wData + '.ZIP';
    // Zipa os arquivos
    ShellExecute(0, nil, 'PKZIP.EXE', PAnsiChar(wBackup + ' ' + pDest + '\*.*'), nil, SW_HIDE);
    Application.ProcessMessages;
    Result := True;
  except on E: Exception do
      fncMensagemError('Erro ao tentar compactar os arquivos', -1, -1, E.Message);
  end;
end;


Bem acho que agora sim.


Responder

16/01/2010

Perivaldo Martins

Quando é feita a exclusão dos arquivos que são uma espécie de arquivos temporários, ele apaga o arquivo zipado ou só o seu conteúdo?   Boa sorte e bons códigos.
Responder

16/01/2010

Adolfo Lopes

Deleta o conteudo. Esta copia e feita com o Sistema em uso, por isto primeiro faço a copia e verifico se tudo bem e dai compacto.

Ok
Responder

16/03/2010

Adolfo Lopes

Continuo com o problema:

Onde exclui os arquivos no temporario e no zipado

Se alguem consegui ajudar obrigado


Responder

12/09/2010

Adolfo Lopes

Continuo com o problema:

Onde exclui os arquivos no temporario e no zipado

Se alguem consegui ajudar obrigado
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar