Enviar Arquivo .zip para FTP

Delphi

05/11/2010

Olá A Todos,   Quero enviar um arquivo backup.zip para o FTP. A Principio até estou conseguindo enviar, porem quando pego o arquivo .zip no ftp ele está corrompido.   Segue a rotina,   procedure TfrmBackup.BitBtn1Click(Sender: TObject);
var
DataBase, sSQL : String;
mensagem, sNomeArq,  Arquivo, NomeFantasia, sNomeZip  : String;
Result : Boolean;
begin
try
 Screen.Cursor := crSQLWait;
 Application.ProcessMessages;
 NomeFantasia := DMCadastro.PesqSql('SELECT FANTASIA RETORNO FROM EMPRESA WHERE CODEMPRESA = ' + IntToStr(CodEmpresa));  sNomeArq :='BKDBSCI' + StringReplace(NomeFantasia,' ','-',[rfReplaceAll]) +  FormatDateTime('dd-mm-yy-hh-nn-ss', Now);
 Arquivo := edtCaminho.Text + '\' + sNomeArq + edtTipo.Text;  DataBase := DMCadastro.SQLConexao.Params.Values['DataBase'];  sSQL := 'BACKUP DATABASE ' + DataBase + ' TO DISK=' +  QuotedStr(Arquivo);
 DMCadastro.ExecutaSQL(sSQL);  if ckCompactar.Checked then
  begin
    sNomeZip := edtCaminho.Text + '\' + sNomeArq + '.zip';      if FileExists('C:\Program Files\WinRAR\winrar.exe') then
       WinExec( PChar('"C:\Program Files\WinRAR\winrar.exe" e ' + sNomeZip + ' ' + Arquivo),  SW_SHOWNOACTIVATE)
        else
         if FileExists('C:\Arquivos de Programas\WinRAR\winrar.exe') then
           WinExec( PChar('"C:\Arquivos de Programas\WinRAR\winrar.exe" a ' + sNomeZip + ' ' + Arquivo),  SW_SHOWNOACTIVATE)
             else
              if FileExists('C:\Program Files (x86)\WinRAR\winrar.exe') then
                WinExec( PChar('C:\Program Files (x86)\WinRAR\winrar.exe a ' + sNomeZip + ' ' + Arquivo),  SW_SHOWNOACTIVATE);
 if ckSuporte.Checked then
  begin
   while IsFileInUse(sNomeZip) do
    Result := False;
    try
        IdFTP.Host := 'host';
        IdFTP.Username := 'username';
        IdFTP.Password := 'senha';
        IdFTP.Port := 21;
        IdFTP.TransferType := ftASCII;         IdFTP.Connect();
        IdFTP.ChangeDir('public_html');
        IdFTP.ChangeDir('Clientes');
        IdFTP.ChangeDir('BACKUPS');         IdFTP.Put(sNomeZip, sNomeArq + '.zip');
    finally
       IdFTP.Disconnect;
    end;
  end;   end;
 mensagem := 'Cópia de Segurança efetuada com sucesso.';
 Application.MessageBox(PChar(Mensagem),'Atenção!', mrNone + MB_ICONINFORMATION);
 Screen.Cursor := crDefault; except
 Screen.Cursor := crDefault;
 mensagem := 'Ocorreu um erro durante a cópia de segurança.';
 Application.MessageBox(PChar(Mensagem),'Atenção!', mrNone + MB_ICONERROR);
end;   Se alguem puder ajudar agradeço.
Carlos Júnior

Carlos Júnior

Curtidas 0

Melhor post

Emerson Nascimento

Emerson Nascimento

05/11/2010

sempre fiz esse tipo de transferência em modo binário, nunca em ASCII.


IdFTP.TransferType := ftASCII; -- troque para binário ftBinary


GOSTEI 1

Mais Respostas

Carlos Júnior

Carlos Júnior

05/11/2010

é isso mesmo,   Obrigado,
GOSTEI 1
POSTAR