diferenças entre arquivo e diretorio via ftp
Colegas, por favor, não consegui entender uma coisa:
estou usando o idFtp do indy clients para criar diretorios no meu server ftp e fazer upload de arquivos. Porém, quando eu dou um ´list´ no idftp e ele retorna um tstringlist com os nomes dos arquivos, como eu faço pra diferenciar o que é arquivo e o que é diretório?
Grato!
estou usando o idFtp do indy clients para criar diretorios no meu server ftp e fazer upload de arquivos. Porém, quando eu dou um ´list´ no idftp e ele retorna um tstringlist com os nomes dos arquivos, como eu faço pra diferenciar o que é arquivo e o que é diretório?
Grato!
Vitor Rubio
Curtidas 0
Respostas
Massuda
22/08/2005
Você deve estar usando o método TIdFTP.List... nesse caso, você pode especificar para retornar uma lista de todos os arquivos ou de todos os diretorios; conforme o help do TIdFTP, o [b:90a9f48627]segundo[/b:90a9f48627] parâmetro do método List...[quote:90a9f48627=´Help do Indy´]...is a String value that contains a mask indicating the files and/or directories to be included in the listing. ASpecifier can contain common wildcard characters like ´*´ and ´?´. Some useful masks include:[list:90a9f48627][*:90a9f48627]*.* - All files in the current directory.[*:90a9f48627]* - All directory entries in the current directory.[*:90a9f48627]*. - All files regardless of extension in the current directory.[*:90a9f48627]A??.txt - All text files that have a 3-character name starting with ´A´.[/list:u:90a9f48627][/quote:90a9f48627]...ou seja, você pode dar um List(...,´*´) para obter todos os diretórios e um List(...´*.´) para obter todos os arquivos.
GOSTEI 0
Vitor Rubio
22/08/2005
Também vi isso no help, mas não é bem assim.... Se você usa o ´*´ ele lista todos os arquivos, todos os diretorios e entra nos diretorios, listando também os arquivos e subdiretorios dentro deles.
usando em branco ´´ ele só lista diretorios e arquivos.
usando em branco ´´ ele só lista diretorios e arquivos.
GOSTEI 0
Adriano Santos
22/08/2005
Tive o mesmo problema.
Fiz um teste aqui e o que obtive foi o mesmo resultado que o victo^_^ relatou, não dá pra saber quem é quem.
Fiz um teste aqui e o que obtive foi o mesmo resultado que o victo^_^ relatou, não dá pra saber quem é quem.
GOSTEI 0
Massuda
22/08/2005
Desculpe, normalmente eu não uso essa lista informada pelo TIdFTP.List, mas sim uso a lista TIdFTP.DirectoryListing.
No servidor que utilizo, usando ´*.*´ retorna todos os arquivos enquanto ´*´ retorna todos os arquivos mais diretórios.
Fora isso, no início de cada string tem um conjunto de caracteres que indica os atributos (estilo Unix) de cada entrada no diretório......e todo diretório tem um atributo ´d´ indicado. Mas isso depende muito do tipo de servidor que você estiver usando (no meu caso, é um servidor Linux).
Uma outra forma de fazer isso, que independe do tipo de servidor, é manipular a lista TIdFTP.DirectoryListing......note que passei nil em TIdFTP.List porque não preciso do texto enviado pelo servidor, mas sim vou usar a lista gerada pelo componente.
No servidor que utilizo, usando ´*.*´ retorna todos os arquivos enquanto ´*´ retorna todos os arquivos mais diretórios.
Fora isso, no início de cada string tem um conjunto de caracteres que indica os atributos (estilo Unix) de cada entrada no diretório...
-rw-rw-r-- 1 mickey.mouse ftp 12345 Jan 12 2000 imagem1.jpg drwxrwxr-x 2 mickey.mouse ftp 512 Jan 12 2000 diretorio1 -rw-rw-r-- 1 mickey.mouse ftp 12345 Jan 12 2000 imagem2.jpg
Uma outra forma de fazer isso, que independe do tipo de servidor, é manipular a lista TIdFTP.DirectoryListing...
var Lista: TStringList; I: Integer; ... // passo nil porque não preciso da resposta do servidor IdFTP1.List(nil); for I := 0 to Pred(IdFTP1.DirectoryListing.Count) do begin // IdFTP1.DirectoryListing[I].FileName = nome do arquivo/diretório if IdFTP1.DirectoryListing[I].ItemType = ditFile then begin // é um arquivo end else if IdFTP1.DirectoryListing[I].ItemType = ditDirectory then begin // é um diretório end; ... end; ...
GOSTEI 0
Adriano Santos
22/08/2005
Firmeza Massuda, consegui usar o esquema que passou. Só fiquei com duas dúvidas (já pensando em montar meu próprio programa ftp, rs).
1 - Como usar só o DirectoryListing?
Vc disse que que uma outra forma seria usando um FOR e tals, fiz de acordo com seu exemplo:
Mas e qual seria a primeira forma?
2 - Como eu faço para navegar, ou seja, quero abrir a pasta PUB no meu servidor FTP? Direto no idFtp não tem como informar certo?
valeu
1 - Como usar só o DirectoryListing?
Vc disse que que uma outra forma seria usando um FOR e tals, fiz de acordo com seu exemplo:
procedure TForm1.Button1Click(Sender: TObject); var I : Integer; begin Application.ProcessMessages; with IdFTP1 do begin Connect; List(Nil); for I := 0 to Pred(DirectoryListing.Count)-1 do if DirectoryListing[I].ItemType = ditFile then ListBox1.Items.Add(´Arquivo: ´ + DirectoryListing[I].FileName) else if DirectoryListing[I].ItemType = ditDirectory then ListBox1.Items.Add(´Diretório: ´ + DirectoryListing[I].FileName); Disconnect; end; end;
Mas e qual seria a primeira forma?
2 - Como eu faço para navegar, ou seja, quero abrir a pasta PUB no meu servidor FTP? Direto no idFtp não tem como informar certo?
valeu
GOSTEI 0
Massuda
22/08/2005
[quote:be0dbb3cb2=´Adriano Santos´]Mas e qual seria a primeira forma?[/quote:be0dbb3cb2]Desculpe, acho que escrevi de uma forma que dá impressão que tem outra forma de usar o DirectoryListing... eu quis dizer que além de tentar parsear o texto retornado pelo List, outra forma é processar o DirectoryListing.
[quote:be0dbb3cb2=´Adriano Santos´]2 - Como eu faço para navegar, ou seja, quero abrir a pasta PUB no meu servidor FTP? Direto no idFtp não tem como informar certo?[/quote:be0dbb3cb2]Você tem que navegar usando TIdFTP.ChangeDir(...caminho...) e TIdFTP.ChangeDirUp (equivalem a usar ´CD´ e ´CD ..´ no prompt do DOS).
[quote:be0dbb3cb2=´Adriano Santos´]2 - Como eu faço para navegar, ou seja, quero abrir a pasta PUB no meu servidor FTP? Direto no idFtp não tem como informar certo?[/quote:be0dbb3cb2]Você tem que navegar usando TIdFTP.ChangeDir(...caminho...) e TIdFTP.ChangeDirUp (equivalem a usar ´CD´ e ´CD ..´ no prompt do DOS).
GOSTEI 0