Enviar Arquivo .zip para FTP
05/11/2010
0
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.
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
Curtir tópico
+ 0
Responder
Post mais votado
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
IdFTP.TransferType := ftASCII; -- troque para binário ftBinary
Emerson Nascimento
Responder
Mais Posts
Clique aqui para fazer login e interagir na Comunidade :)