Copia Arquivos, Compactação E Deleção Diretorio Backup de arquivos
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.
Agradeço, se alguem puder mostrar onde estou a errar.
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
Curtidas 0
Respostas

Perivaldo Martins
16/01/2010
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.
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.
GOSTEI 0

Adolfo Lopes
16/01/2010
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
Bem acho que agora sim.
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.
GOSTEI 0

Perivaldo Martins
16/01/2010
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.
GOSTEI 0

Adolfo Lopes
16/01/2010
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
Ok
GOSTEI 0

Adolfo Lopes
16/01/2010
Continuo com o problema:
Onde exclui os arquivos no temporario e no zipado
Se alguem consegui ajudar obrigado
Onde exclui os arquivos no temporario e no zipado
Se alguem consegui ajudar obrigado
GOSTEI 0

Adolfo Lopes
16/01/2010
Continuo com o problema:
Onde exclui os arquivos no temporario e no zipado
Se alguem consegui ajudar obrigado
Onde exclui os arquivos no temporario e no zipado
Se alguem consegui ajudar obrigado
GOSTEI 0