Geraldo,
A função ADir
funciona normalmente, porém quando você está no REST, sua thread não possui interface, logo o acesso ao file system fica limitado, normalmente acessando somente o que está no rootpath
.
Abaixo um exemplo de uso dessa função em um serviço REST TLPP:
#include "tlpp-rest.th"
//-------------------------------------------------------------------
/*{Protheus.doc} u_RestDir
REST para listagem de arquivos
@return logical, sempre .T.
@author Daniel Mendes
@since 23/09/2021
@version 1.0
*/
//-------------------------------------------------------------------
@get("/test/v1/aDir/")
function u_RestDir()
local aFiles as array
local aSizes as array
local nSum as numeric
local nI as numeric
local cReturn as character
local cBreakLine as character
local cTab as character
local cPath as character
cTab := Chr(9)
cBreakLine := Chr(13) + Chr(10)
cReturn := "Arquivos encontrados: " + cBreakLine
cPath := oRest:getQueryRequest()["path"]
//Se vazio, pesquisa diretamente no rootpath
if Empty(cPath)
cPath := "\*.*"
endif
//A função ADir não acessa o C:\ quando a thread não possui interface
nSum := ADir(cPath, @aFiles, @aSizes)
for nI := 1 to nSum
cReturn += cBreakLine + aFiles[nI] + cTab + cValToChar(aSizes[nI])
next
oRest:setResponse(cReturn)
return .T.
Esse serviço retorna uma string com os arquivos encontrados, tendo um queryparam para informar onde deseja efetuar a pesquisa dos arquivos. Exemplo de consumo:
http://127.0.0.1:8084/test/v1/aDir
http://127.0.0.1:8084/test/v1/aDir/?path=/system/*.*
Documentação: https://tdn.totvs.com/display/tec/ADir
Geraldo, poderia colocar como você tentou fazer ela no REST?
— Daniel Mendes 23 de Sep de 2021