Fórum Copia Arquivos, Compactação E Deleção Diretorio Backup de arquivos #14159
16/01/2010
0
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
Curtir tópico
+ 0Posts
16/01/2010
Perivaldo Martins
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
16/01/2010
Adolfo Lopes
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
16/01/2010
Perivaldo Martins
Gostei + 0
16/01/2010
Adolfo Lopes
Ok
Gostei + 0
16/03/2010
Adolfo Lopes
Onde exclui os arquivos no temporario e no zipado
Se alguem consegui ajudar obrigado
Gostei + 0
12/09/2010
Adolfo Lopes
Onde exclui os arquivos no temporario e no zipado
Se alguem consegui ajudar obrigado
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)