Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Data Arquivo no FTP


Guest Rony Ortega

Pergunta

Guest Rony Ortega

:huh: Estou tentando fazer uma atualizador automatico em delphi 7 usando idftp, que verifica se o *.zip do FTP tem data maior que o atual na maquina , mas não consigo pegar data do Ftp para fazer a comparação dos arquivos, se alguém puder me ajudar desja agradeço!!

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Segue parte de um código de atualização que usa o recurso citado pelo colega Churc.

Eu retirei detalhes que eu usava especificamente no meu projeto, mas deve estar funcional e pode servir de referência a você:

// botão para verificação de atualizações
procedure TFrmUpdate.btnVerificaClick(Sender: TObject);
  function FindHostFileInfo(var IdFTPListItem :TIdFTPListItem; FileName :string): Boolean;
  var
    Idx :Integer;
  begin
    IdFTPListItem := nil;
    for Idx := 0 to IdFTP1.DirectoryListing.Count -1 do
      if AnsiUpperCase(IdFTP1.DirectoryListing.Items[Idx].FileName) = AnsiUpperCase(FileName) then
      begin
        IdFTPListItem := IdFTP1.DirectoryListing.Items[Idx];
        Break;
      end;
    Result := Assigned(IdFTPListItem);
  end;

var
  DtExeLocal,
  DtExeHost :String;
  IdFTPListItem :TIdFTPListItem;
begin
 // conecta ao site
  IdFTP1.Connect;
 // se necessário, posiona no diretório aonde está o programa
 // IdFTP1.ChangeDir('bangalo.org.br/download');
 // obtém a lista de aquivos/diretórios no diretório atual
  IdFTP1.List(Nil);
 // se encontramos o programa no diretório, então prosseguimos com as verificações
  if FindHostFileInfo(IdFTPListItem, 'programa.exe') then
  begin
    DtExeHost := FormatDateTime('yyyy/mm/dd hh:mm', IdFTPListItem.ModifiedDate);
    DtExeLocal := FormatDateTime('yyyy/mm/dd hh:mm', FileDateToDateTime(FileAge('programa.exe')));
   // se a data do executável no host é mais recente...
    if DtExeHost > DtExeLocal then
    begin
      lbStatus.Caption := 'Há uma atualização disponível';
     // pode ser questionado o usuário se deseja, ou não, atualizar 
     // ...

     // inicializa barra de progresso com tamanho do arquivo
      ProgressBar1.Max := IdFTPListItem.Size;
      lbStatus.Caption := 'Iniciando download da atualização';
     // busca arquivo, sobrescrevendo o mesmo - talvez seja conveniente um esquema de backup
      IdFTP1.Get(ProgName, 'programa.exe', True);
     // muda a data para a data do arquivo buscado no site - porque o arquivo baixado recebe a data atual 
      FileSetDate('programa.exe', DateTimeToFileDate(IdFTPListItem.ModifiedDate));
    end else
     // assinala processo como sem atualização a realizar
      lbStatus.Caption := 'Seu programa está atualizado';
  end else
    lbStatus.Caption := 'Não há uma versão do programa para download';
 // disconecta do site
  IdFTP1.Disconnect;
end;

// atualização da barra de progresso
procedure TFrmUpdate.IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer);
begin
 // Atualiza barra de progresso
  ProgressBar1.Position := AWorkCount;
  ProgressBar1.Repaint;
  Application.ProcessMessages;
end;

Abraços

Editado por Micheus
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...