FTP -Verificar se existe um arquivo em uma determinada pasta

Delphi

25/06/2004

Como verificar se um determinado arquivo esta em uma devida pasta de FTP, usando o delphi 7.

Ricardo



[color=red:563b0d1b44]Título alterado pelo Moderador oTTo. Removido: ´FTP´.[/color:563b0d1b44]


Zlink

Zlink

Curtidas 0

Respostas

Tatuweb

Tatuweb

25/06/2004

Se tratando de FTP eu prefiro fazer tudo via API. Assim evita problemas com versões diferentes do Delphi. Para verificar se existe um arquivo em um servidor FTP basta implementar o código abaixo. Modifique o código de acordo com seu servidor.

var
  hConnection, hOpen, hFind: PInteger;
  hData: TWIN32FINDDATA;
begin
  hOpen := InternetOpen (´´, INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  hConnection := InternetConnect (hOpen, ´ftp.seusite.com.br´, INTERNET_DEFAULT_FTP_PORT,
    ´seulogin´, ´suasenha´, INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);
  FtpSetCurrentDirectory (hConnection, ´pasta_a_ser_verificada´);
  hFind := FtpFindFirstFile (hConnection, ´arquivo.exe´, hData, 0, 0);

  if hFind = nil then
    Caption := ´Arquivo não foi encontrado.´
  else
    Caption := ´O Arquivo foi encontrado.´;

  InternetCloseHandle (hConnection);
  InternetCloseHandle (hOpen);
end;



GOSTEI 0
Tatuweb

Tatuweb

25/06/2004

Esqueci de informar. Você deve adicionar a unit Wininet na seção uses do form.

:wink:


GOSTEI 0
Zlink

Zlink

25/06/2004

Tentei em farios ftps e alterando com várias pastas e arquivos, não obtive sucess.
Tem alguma forma de saber se tivemos acesso a determinado ftp ou pasta, algum retorno, exemplo:

label1.caption := ftp que está logado ou a pasta atual no ftp

Cordialmente

Ricardo


GOSTEI 0
Zlink

Zlink

25/06/2004

Caro Amigo

Refiz os testes com mais calma, e deu certo, muito obrigado pela rotina, se tiver mais algumas como:
a) listar os aquivos da pasta
b) ...

Ficarei muito agradecido.

Atenciosamente

José Ricardo


GOSTEI 0
Zlink

Zlink

25/06/2004

c) listar as pastas e subpastas
d) editar um arquivo txt ou baixar para a máquina local para edita-lo

Obrigado


GOSTEI 0
Flaviosan

Flaviosan

25/06/2004

Desculpe me meter, mas acho uma boa ideia testar a data do arquivo pra ver se ele é mais novo que um arquivo que já se possui, tipo como o liveupdate do virusscan e do norton.
Espero ter ajudado.


GOSTEI 0
Zlink

Zlink

25/06/2004

Fica mais uma dúvida

Como trocar as variaveis(pastas por edits)

Exemplo:
hConnection := InternetConnect (hOpen, ´meuftp.com.br´, INTERNET_DEFAULT_FTP_PORT,
hConnection := InternetConnect (hOpen, [b:68ecf2eacf]Edit1.text[/b:68ecf2eacf], INTERNET_DEFAULT_FTP_PORT,
´´, ´´, INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);
FtpSetCurrentDirectory (hConnection, ´/pasta/subpasta/´);
FtpSetCurrentDirectory (hConnection, [b:68ecf2eacf]edit2.text[/b:68ecf2eacf]);


GOSTEI 0
Tatuweb

Tatuweb

25/06/2004

Como trocar as variaveis (pastas por edits)

Faça do jeito que está fazendo mas antes coloque um PChar. Isso vai resolver o problema:
[b:9c8c5bc626]PChar (Edit1.Text)[/b:9c8c5bc626]

[b:9c8c5bc626]Outros comandos:[/b:9c8c5bc626]

[b:9c8c5bc626]Fazer download [/b:9c8c5bc626]
FtpGetFile (hConnection, ´arquivo.exe´, ´c:\pasta_onde_vou_guardar\arquivo.exe´, False, 0, 0, 0);

[b:9c8c5bc626]Fazer Upload [/b:9c8c5bc626]
FtpPutFile (hConnection, ´C:\arquivo.exe´, ´arquivo.exe´, 0, 0);

[b:9c8c5bc626]Deletar arquivo no servidor [/b:9c8c5bc626]
FtpDeleteFile (hConnection, ´arquivo.exe´);

[b:9c8c5bc626]Renomear um arquivo no servidor[/b:9c8c5bc626]
FtpRenameFile (hConnection, ´arquivo.exe´, ´file.exe´);

[b:9c8c5bc626]Remover um diretório no servidor[/b:9c8c5bc626]
FtpRemoveDirectory (hConnection, ´nome_do_diretorio´);

As tres primeiras e as duas ultimas linhas da rotina passada no outro post permanecem iguais. O resto é só adaptar. As rotinas acima são apenas uma alternativa ao uso dos componentes Indy e FastNet para evitar problemas com versões diferentes do Delphi. Use PChar antes das strings. Eu esqueci de colocar.

Mais sobre funções FTP em (conteúdo inglês):
http://www.swissdelphicenter.ch/torry/showcode.php?id=1095
http://www.cryer.co.uk/brian/delphi/wininet.htm

:wink:


GOSTEI 0
Zlink

Zlink

25/06/2004

Caro amigo

Funcionou beleza, estou precisando agora só de saber como pegar a lista de pastas e de arquivos de um ftp.

Atenciosamente

José Ricardo


GOSTEI 0
Tatuweb

Tatuweb

25/06/2004

Baixe um exemplo completo nesse site:
http://users.servicios.retecal.es/sapivi/src/D5_WinInetFTP.zip


GOSTEI 0
Guima

Guima

25/06/2004

FtpPutFile (hConnection, PChar(Origem), PChar(SR.Name), 0, 0); TatuWeb fiz a sua rotina pra v c a foto estah na net, caso naun esteja envia, isso funciona legal, porem ela naun sobe - qdo vou no site ela naun estah lah - uso o D5 - alguem pode me ajudar urgente ??

Sem mais e obrigado

Guima


GOSTEI 0
Antunes Rodrigo

Antunes Rodrigo

25/06/2004

Caso seja de interesse de mais alguém. Estava precisando disso.


http://www.cryer.co.uk/brian/delphi/wininet/example_findfirstnextfile.htm
GOSTEI 0
POSTAR