Pesquisar na Comunidade
Showing results for tags 'acbr; acbrftpdownload;'.
Encontrado 1 registro
-
[Alteração de Código] Sugestão para melhoria de código ACBrFTPDownload
um tópico no fórum postou Augusto Knirsch ACBrTCP
Boa Tarde! Me deparei com a seguinte situação, preciso baixar alguns arquivos de um host FTP, porém quando a primeira opção estiver offline gostaria que ele tentasse baixar do segundo host, então escrevi a seguinte função. function RecebeArquivoFTP(const aArquivoFTP, aArquivoLocal: String; aHookMonitor: TAcbrDownloadHookMonitor = nil): Boolean; var ArquivoLocal: String; CaminhoDestino: String; ArquivoDestino: String; FACBrDownload: TACBrDownload; i: Integer; begin Result := False; FACBrDownload := TACBrDownload.Create(nil); try for i := 0 to Length(FTP_HOST) do begin try FACBrDownload.Protocolo := protFTP; FACBrDownload.FTP.FtpHost := FTP_HOST[i]; //constante, array de strings com as informações do hosts. FACBrDownload.FTP.FtpPort := FTP_PORT[i]; FACBrDownload.FTP.FtpUser := FTP_USER[i]; FACBrDownload.FTP.FtpPass := FTP_PASSWORD[i]; FACBrDownload.OnHookMonitor := aHookMonitor; ArquivoLocal := PadraoBarrasWindows(aArquivoLocal); //função para adequar o padrao das barras. CaminhoDestino := TPath.GetDirectoryName(ArquivoLocal); ArquivoDestino := TPath.GetFileName(ArquivoLocal); if not(DirectoryExists(ExtractFilePath(ArquivoLocal))) then ForceDirectories(ExtractFilePath(ArquivoLocal)); if (FileExists(ArquivoLocal +'.part')) then DeleteFile(ArquivoLocal +'.part'); if (FileExists(ArquivoLocal)) then DeleteFile(ArquivoLocal); FACBrDownload.DownloadDest := CaminhoDestino; FACBrDownload.DownloadNomeArq := aArquivoFTP; FACBrDownload.DownloadUrl := IncluirSeparadorDiretorio(FACBrDownload.FTP.FtpHost, '/') + aArquivoFTP; FACBrDownload.StartDownload; Result := (FACBrDownload.DownloadStatus = stDownload); if (Result) then Break; except // Não levanta a exceção, apenas tenta na próxima iteração end; end; finally FACBrDownload.Free; end; end; Porém, se por algum motivo ocorre alguma exceção na tentativa de login dentro do ACBr ele simplesmente da um exit como mostra o código abaixo. // FTP Login if not fFTPSend.Login then Exit; Minha sugestão seria ele criar uma exceção caso ocorresse algum problema no login: // FTP Login if not fFTPSend.Login then raise Exception.Create('Não foi possível efetuar o login!'); Peço desculpas por qualquer inconveniente ou confusão no código pois estou iniciando na programação... Segue em anexo o arquivo com a alteração. ACBrFTPDownload.pas