Backup em CD

20/01/2006

Caros colegas. estou precisando fazer uma rotina para realizar backup em cd.
dei uma procurada no forum e vi um post bem legal:

http://forum.clubedelphi.net/viewtopic.php?t=50462&highlight=backup

- ai fala algo sobre usar o InCD. Entao o que fiz foi o seguinte:

1. instalei o InCd 4

2. criei um código para compactar meu banco e em seguida copia-lo para o Cd.

- O problema é que o sistema nao copia para o CD. vou colar o código aqui e quem puder me auxiliar na questão agradeço

uses
ShellApi


procedure TBackup.IniciarBackupClick(Sender: TObject);
var
sl: TStringList;  //compactação do arquivo
NewFileName: string;  //compactação do arquivo
Dados: TSHFileOpStruct; // copia do arquivo para cd

begin

  Memo1.Lines.Add(´Compactando o arquivo...´);
  if not assigned(fzip) then
begin
sl := TStringList.Create;
    NewFileName := ExtractFilePath(Application.ExeName);
try
sl.Add(NewFileName+´\ADM.FDB´);
fzip := TZipThread.Create(´Backup - ´+FormatDateTime(´dd"_"mm"_"yyy´,Date)+´.zip´,sl,Memo1,false);
finally
sl.Free;
end;
    Memo1.Lines.Add(´Arquivo Compactado...´);
end;

  Memo1.Lines.Add(´Copiando o arquivo para o Cd...´);
  FillChar(Dados,SizeOf(Dados), 0); 
  with Dados do
  begin
      NewFileName := ExtractFilePath(Application.ExeName);
      wFunc       := FO_COPY;
      pFrom       := PChar(NewFileName+´\´+´Backup - ´+FormatDateTime(´dd"_"mm"_"yyy´,Date)+´.zip´);
      pTo         := PChar(DRIVE_CDROM);
      fFlags:= FOF_ALLOWUNDO;
  end;
    SHFileOperation(Dados);
    Memo1.Lines.Add(´Backup realizado com sucesso...´);


end;




Mahdak

Respostas

20/01/2006

Lindomar.des

colega,

uso um método parecido com o seu, só q p/ copiar p o cd uso a instrução:

CopyFile(Path1 + sBackup, Path2 + sBackup);

uso um cd-rw e pelo incd mando formatar e funciona blz.

Lindomar


Responder Citar

20/01/2006

Mahdak

colega, uso um método parecido com o seu, só q p/ copiar p o cd uso a instrução: CopyFile(Path1 + sBackup, Path2 + sBackup); uso um cd-rw e pelo incd mando formatar e funciona blz. Lindomar



Lindomar, seguindo sua sugestão fiz isso:

Memo1.Lines.Add(´Copiando o arquivo para o Cd...´);
  NewFileName := ExtractFilePath(Application.ExeName);
  CopyFile(NewFileName+´\´+´Backup - ´+FormatDateTime(´dd"_"mm"_"yyy´,Date)+´.zip´, DRIVE_CDROM+´\´+´Backup - ´+FormatDateTime(´dd"_"mm"_"yyy´,Date)+´.zip´,True);
  Memo1.Lines.Add(´Backup realizado com sucesso...´);


o erro gerado foi o seguinte:

[Error] Unit_Bkp.pas(93): Incompatible types: ´String´ and ´PAnsiChar´

alguma sugestão?


Responder Citar

20/01/2006

Lindomar.des

mahdak,

qual o tipo da variavel/constante de: DRIVE_CDROM

Lindomar.


Responder Citar

20/01/2006

Christian_adriano

Mahdak,

Use o código assim:

Memo1.Lines.Add(´Copiando o arquivo para o Cd...´); 
  NewFileName := ExtractFilePath(Application.ExeName); 
  CopyFile(PChar(NewFileName+´\´+´Backup - ´+FormatDateTime(´dd"_"mm"_"yyy´,Date)+´.zip´, DRIVE_CDROM+´\´+´Backup - ´+FormatDateTime(´dd"_"mm"_"yyy´,Date)+´.zip´),True); 
  Memo1.Lines.Add(´Backup realizado com sucesso...´); 



E não esqueça que para funcionar o InCD precisa ser um CD-RW formatado (pelo InCD).

Espero ter ajudado.

[]´s.


Responder Citar

20/01/2006

Edilcimar

Eu faço a cópia através do incd e o winzip, basta apenas uma única linha
If RadioGroup1.ItemIndex = 0 then
Caminho := ´D:\´
Else If RadioGroup1.ItemIndex = 1 then
Caminho := ´E:\´
Else If RadioGroup1.ItemIndex = 2 then
Caminho := ´F:\´
Else If RadioGroup1.ItemIndex = 3 then
Caminho := ´G:\´
Else If RadioGroup1.ItemIndex = 4 then
Caminho := ´H:\´
Else
Caminho := ´I:\´;
Dia := Copy(DateToStr(Date),1,2);
Caminho := Caminho + Dia +´\´;
If not DirectoryExists(Caminho) then
If not CreateDir(Caminho) then
Raise Exception(´Não foi possível criar o diretório ´ + Caminho);
If DirectoryExists(Caminho) then
Begin
Caminho := Caminho + ´NomeDoArquivoDeBackup´;
WinExec(PChar(´C:\Arquivos de Programas\WinZip\WinZip32 -min -a -p ´´+Caminho+´´ ´+ ´´´ + ´*.*´+ ´´´),1);
End;


Responder Citar

20/01/2006

Thiagopedro

Colegas, tenho utilizando Magic CD Burner.

Muito bom por sinal. Em meados de 6 meses nunca tive nenhum problema.

Tanto gravo cd... qto dvd...

Quem quiser me contacte pelo msn.

msn: thiago@amenezes.com.br


Responder Citar

20/01/2006

Mahdak

Mahdak, Use o código assim:
Memo1.Lines.Add(´Copiando o arquivo para o Cd...´); 
  NewFileName := ExtractFilePath(Application.ExeName); 
  CopyFile(PChar(NewFileName+´\´+´Backup - ´+FormatDateTime(´dd"_"mm"_"yyy´,Date)+´.zip´, DRIVE_CDROM+´\´+´Backup - ´+FormatDateTime(´dd"_"mm"_"yyy´,Date)+´.zip´),True); 
  Memo1.Lines.Add(´Backup realizado com sucesso...´); 
E não esqueça que para funcionar o InCD precisa ser um CD-RW formatado (pelo InCD). Espero ter ajudado. []´s.



cristian, desse jeito ai nao deu nao. o problema com a conversao de variavel é só com o ´DRIVE_CDROM´ entao tentei o seguinte:

CopyFile(NewFileName+´\´+´Backup - ´+FormatDateTime(´dd"_"mm"_"yyy´,Date)+´.zip´, PChar(DRIVE_CDROM+´\´+´Backup - ´+FormatDateTime(´dd"_"mm"_"yyy´,Date)+´.zip´)),True);


e mesmo assim houve erro na conversao:

[Error] Unit_Bkp.pas(97): Incompatible types: ´String´ and ´PAnsiChar´

como eu poderia converter essa String em PAnsiChar??


Responder Citar

20/01/2006

Mahdak

Eu faço a cópia através do incd e o winzip, basta apenas uma única linha If RadioGroup1.ItemIndex = 0 then Caminho := ´D:\´ Else If RadioGroup1.ItemIndex = 1 then Caminho := ´E:\´ Else If RadioGroup1.ItemIndex = 2 then Caminho := ´F:\´ Else If RadioGroup1.ItemIndex = 3 then Caminho := ´G:\´ Else If RadioGroup1.ItemIndex = 4 then Caminho := ´H:\´ Else Caminho := ´I:\´; Dia := Copy(DateToStr(Date),1,2); Caminho := Caminho + Dia +´\´; If not DirectoryExists(Caminho) then If not CreateDir(Caminho) then Raise Exception(´Não foi possível criar o diretório ´ + Caminho); If DirectoryExists(Caminho) then Begin Caminho := Caminho + ´NomeDoArquivoDeBackup´; WinExec(PChar(´C:\Arquivos de Programas\WinZip\WinZip32 -min -a -p ´´+Caminho+´´ ´+ ´´´ + ´*.*´+ ´´´),1); End;


edilcimar, explica essa linha por favor que ficou meio confuso:

WinExec(PChar(´C:\Arquivos de Programas\WinZip\WinZip32 -min -a -p ´´+Caminho+´´ ´+ ´´´ + ´*.*´+ ´´´),1);

abraços...


Responder Citar

20/01/2006

Edilcimar

eu peguei uma variável chamada caminho, tipo string e fui incrementando a mesma, primeiro ela é a letra onde está o cd, depois ela passa a ser a letra do cd + o dia do mes, e depois é verificado se o diretório existe, se não existir então é criado depois é acrescentado o nome do arquivo de backup e finalmente, na linha onde perguntou é utilizado o winexec(), onde estão colocados o diretório padrão onde é instalado o winzip com os comandos para criação do arquivo (-min, -a, -p), a variável caminho, e que é para copiar todos os arquivos (*.*). O incd eu uso para formatar um cd-rw.


Responder Citar

20/01/2006

Mahdak

eu peguei uma variável chamada caminho, tipo string e fui incrementando a mesma, primeiro ela é a letra onde está o cd, depois ela passa a ser a letra do cd + o dia do mes, e depois é verificado se o diretório existe, se não existir então é criado depois é acrescentado o nome do arquivo de backup e finalmente, na linha onde perguntou é utilizado o winexec(), onde estão colocados o diretório padrão onde é instalado o winzip com os comandos para criação do arquivo (-min, -a, -p), a variável caminho, e que é para copiar todos os arquivos (*.*). O incd eu uso para formatar um cd-rw.



Edilcimar, gostei da sua idéia, ela eh simples e direta, porem enfrento mais um probleminha...
no código abaixo eu fasso:
1. primeiro compacto o banco com o Zip master
2. depois mando copiar para um Cd formatado com o InCd 4 da maneira que voce sugeriu...

- O problema é que ele cria a pasta no cd faz o backup no hd como eu determinei, porem nao copia o backup do HD para a pasta criada no cd...

procedure TBackup.Iniciar_BackupClick(Sender: TObject);
var caminho, dia, NewFileName : string;
sl: TStringList;  //compactação do arquivo
begin
    If RadioGroup1.ItemIndex = 0 then
    Caminho := ´D:\´
    Else If RadioGroup1.ItemIndex = 1 then
        Caminho := ´E:\´
    Else If RadioGroup1.ItemIndex = 2 then
        Caminho := ´F:\´
    Else If RadioGroup1.ItemIndex = 3 then
        Caminho := ´G:\´
    Else If RadioGroup1.ItemIndex = 4 then
        Caminho := ´H:\´
    Else
        Caminho := ´I:\´;
        Dia := Copy(DateToStr(Date),1,2);
        Caminho := Caminho + Dia +´\´;
    If not DirectoryExists(Caminho) then
    If not CreateDir(Caminho) then
    Raise Exception(´Não foi possível criar o diretório ´ + Caminho);
    If DirectoryExists(Caminho) then

    Begin
        Memo1.Lines.Clear;
        Memo1.Lines.Add(´Compactando o arquivo...´);
        if not assigned(fzip) then
        begin
        sl := TStringList.Create;
            NewFileName := ExtractFilePath(Application.ExeName);
    try
      sl.Add(NewFileName+´\ADM.FDB´);
      fzip := TZipThread.Create(´Backup - ´+FormatDateTime(´dd"_"mm"_"yyy´,Date)+´.zip´,sl,Memo1,false);
    finally
            sl.Free;
    end;
        Memo1.Lines.Add(´Arquivo Compactado...´);
      end;

        Memo1.Lines.Add(´Copiando arquivo(s) para o CD...´);
        NewFileName := ExtractFilePath(Application.ExeName)+´\´+´Backup - ´+FormatDateTime(´dd"_"mm"_"yyy´,Date)+´.zip´;
        Caminho := Caminho + NewFileName;
        WinExec(PChar(Caminho),1);
        Memo1.Lines.Add(´backup realizado com sucesso!´);
    End;
end;



Responder Citar

20/01/2006

Edilcimar

Eu não faça o backup e depois copio para o cd, eu já faço o backup direto no cd dentro do diretório do dia do mês!
Eu não conheço o zip master, portanto não posso opinar na maneira de utilizá-lo, mas se quer criar o backup no hd e depois enviá-lo para o cd vc vai ter um problema pois o zipador pode estar criando o backup e então o comando de copiar o arquivo para o cd pode não funcionar pois o mesmo ainda não existe


Responder Citar

21/01/2006

Lindomar.des

mahdak,

vou tentar descrever como faço o backup no meu sistema.

1-tenho um prog. q fica rodando em background, tb tem um trayicon.
2-configuro o programa p/ fazer backup de tempos em tempos - atualmente uso 120 minudos (2 em 2 horas)
3-primeiro faço o backup utilizando o comp. da paleta Interbase Admin :
TIBBackupService.
4-Depois desse backup realizado compacto o arquivo GBK gerado para
diminuir ainda mais o tam. do arquivo. Tb utilizo o zipmaster para
compactar. Só para ter uma ideia um arq. de 650MB cai +- p/ 35/40MB
5-toda essa operação faço no HD. Meu programa tem opção para fazer
backup em 2 locais. Qdo o cliente de gravador, que é altamente recomendado, configuro um backup no HD e outro no CD.
6-depois de feito o backup no HD apenas copio o arq. gerado p/ o CD.
Dessa forma fica uma operação mais rápida. Lembrando que a copia
para o CD só é realizada após o término do backup no HD.

como ficaria meio confuso postar todo o código aki no fórum se quiser posso enviar p/ vc dar uma olhada.


Responder Citar

22/01/2006

Mahdak

mahdak, vou tentar descrever como faço o backup no meu sistema. 1-tenho um prog. q fica rodando em background, tb tem um trayicon. 2-configuro o programa p/ fazer backup de tempos em tempos - atualmente uso 120 minudos (2 em 2 horas) 3-primeiro faço o backup utilizando o comp. da paleta Interbase Admin : TIBBackupService. 4-Depois desse backup realizado compacto o arquivo GBK gerado para diminuir ainda mais o tam. do arquivo. Tb utilizo o zipmaster para compactar. Só para ter uma ideia um arq. de 650MB cai +- p/ 35/40MB 5-toda essa operação faço no HD. Meu programa tem opção para fazer backup em 2 locais. Qdo o cliente de gravador, que é altamente recomendado, configuro um backup no HD e outro no CD. 6-depois de feito o backup no HD apenas copio o arq. gerado p/ o CD. Dessa forma fica uma operação mais rápida. Lembrando que a copia para o CD só é realizada após o término do backup no HD. como ficaria meio confuso postar todo o código aki no fórum se quiser posso enviar p/ vc dar uma olhada.



claro que quero lindomar... manda pro meu email: jpxst@hotmail.com

Abração!!


Responder Citar

23/01/2006

Alcantarus

Caros colegas. estou precisando fazer uma rotina para realizar backup em cd. dei uma procurada no forum e vi um post bem legal: http://forum.clubedelphi.net/viewtopic.php?t=50462&highlight=backup - ai fala algo sobre usar o InCD. Entao o que fiz foi o seguinte: 1. instalei o InCd 4 2. criei um código para compactar meu banco e em seguida copia-lo para o Cd. - O problema é que o sistema nao copia para o CD. vou colar o código aqui e quem puder me auxiliar na questão agradeço uses ShellApi

procedure TBackup.IniciarBackupClick(Sender: TObject);
var
sl: TStringList;  //compactação do arquivo
NewFileName: string;  //compactação do arquivo
Dados: TSHFileOpStruct; // copia do arquivo para cd

begin

  Memo1.Lines.Add(´Compactando o arquivo...´);
  if not assigned(fzip) then
begin
sl := TStringList.Create;
    NewFileName := ExtractFilePath(Application.ExeName);
try
sl.Add(NewFileName+´\ADM.FDB´);
fzip := TZipThread.Create(´Backup - ´+FormatDateTime(´dd"_"mm"_"yyy´,Date)+´.zip´,sl,Memo1,false);
finally
sl.Free;
end;
    Memo1.Lines.Add(´Arquivo Compactado...´);
end;

  Memo1.Lines.Add(´Copiando o arquivo para o Cd...´);
  FillChar(Dados,SizeOf(Dados), 0); 
  with Dados do
  begin
      NewFileName := ExtractFilePath(Application.ExeName);
      wFunc       := FO_COPY;
      pFrom       := PChar(NewFileName+´\´+´Backup - ´+FormatDateTime(´dd"_"mm"_"yyy´,Date)+´.zip´);
      pTo         := PChar(DRIVE_CDROM);
      fFlags:= FOF_ALLOWUNDO;
  end;
    SHFileOperation(Dados);
    Memo1.Lines.Add(´Backup realizado com sucesso...´);


end;




Caro Amigo,

Tenho uma rotina qual utilizo um batch (.BAT) e depois chamo esse (.EXE), para meu uso, esta funcionando perfeitamente, pois utilizo tb o inCD, formato um CD-RW e depois gravo utilizando essa rotina abaixo:

PS: Eu utilizo um (.INI) para pegar as configuracoes de qual pasta eu pego o backup e em qual gravadora eu devo gravar.


program Hashing;

{$APPTYPE CONSOLE}

uses
    SysUtils, Windows, IniFiles;

var
    sData : string[08&93;;
    sHora : string&91;04&93;;
    sOrigem, sDestino : string;
    sDrive : string&91;03&93;;
    Inove : TIniFile;

begin
    Inove := TIniFile.Create(ExtractFilePath(ParamStr(0)) + ´Inove.Ini´);

    sDrive := Inove.ReadString(´CONFIG´, ´DRIVE´, ´´);
    sOrigem := Inove.ReadString(´CONFIG´, ´PATH´, ´´);

    ShortDateFormat := ´DD/MM/YYYY´;
    sData := Copy(DateToStr(Date),1,2) + Copy(DateToStr(Date),4,2) + Copy(DateToStr(Date),7,4);
    sHora := Copy(TimeToStr(Time),1,2) + Copy(TimeToStr(Time),4,2);

    sDestino := sDrive + sData + sHora;

    WriteLn(Chr(218) + ´ ´ + Chr(254) + ´ Sobre o Hashing ----------------------------------------------------------´ + Chr(191));
    WriteLn(Chr(179) + ´ Desenvolvido por Inove Tecnologia                                           ´ + Chr(179));
    WriteLn(Chr(192) + ´-----------------------------------------------------------------------------´ + Chr(217));

    if (not DirectoryExists(sDestino)) then
    begin
        WriteLn(´Criando Pasta para Back-Up...´);
        CreateDir(sDestino);
        WriteLn(´Copiando Backup para Pasta ´ + sDestino + ´! Aguarde...´);
        CopyFile(PChar(sOrigem + ´\TLCOPIA.ARJ´),PChar(sDestino + ´\TLCOPIA.ARJ´),FALSE);
        WriteLn(´Processo de Back-Up concluido com sucesso!´);
    end
    else
    begin
        WriteLn(´Erro! Impossivel continuar com a acao.´);
        WriteLn(´Possiveis causas:´);
        WriteLn(´1. A Pasta e o Back-Up ja estao gravados no CD-RW;´);
        WriteLn(´2. Ja atingiu a capacidade total de gravacao no CD-RW;´);
        WriteLn(´3. O CD-RW nao esta formatado com o inCD para executar essa acao;´);
    end;
    Inove.Free;
end.


Abraços,


Alcantarus


Responder Citar