Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Pagetitle
Directory
Directory

Cria um Retorna um array bidimensional com o conteúdo de um diretório.
Para isso, retorna informações a respeito dos arquivos no diretório corrente ou especificado.
Essa função é semelhante a ADir(), porém, retorna um único array ao invés de adicionar valores a uma série de arrays existentes passados por referência
Consulte a função ADir para outras funcionalidades.

Aviso
titleAtenção!
Esta função não opera no SmartClient HTML, pois quando executado via navegador o sistema não tem acesso aos arquivos da estação de trabalho.

Sintaxe

Bloco de código
collapsefalse
Directory( < cDirEsp >, [ cAtributos ], [ uParam1 ], [ lCaseSensitive ], [ nTypeOrder ] )

...

Nome

Tipo

Descrição

Obrigatório

Referência

cDirEsp

caractere

Indica o diretório que será pesquisado e os arquivos que serão apresentados. Além disso,
São permitidos caracteres do tipo curinga são permitidos na especificação de arquivos. Caso esse parâmetro não seja especificado, o valor padrão é *.*., caso  não especificado o valor padrão é *.*

  • Caso especificado um path sem a unidade de disco, serão considerados arquivos e diretórios contidos no AppServer, exemplos:

    // Retorna arquivos da raiz do System do AppServer
    aFiles := aFiles := Directory("/*.*", "D")

    // Retorna arquivos do diretorio de Spool do AppServer
    aFiles := aFiles := Directory("/spool/*.*", "D")

  • Caso esterificado um path com unidade de disco, serão considerados arquivos e diretórios contidos na estação de trabalho em que o SmartClient está sendo executado, exemplo:

    // Exemplo para Windows
    aFiles := Directory(
    "c:\tmp\*.*")

    // Exemplo para Linux (obrigatório uso do l:)
    aFiles := Directory(
    "l:/tmp/*.*")

X


cAtributos

caractere

Indica quais

arquivos com atributos especiais

tipos de arquivos/diretórios devem ser incluídos no array.

Esse parâmetro consiste em uma string que contém, por exemplo, um ou mais dos caracteres H, S, D e V (alem de : para indicar arquivos a ser exibidos). Para mais detalhes, consulte a Tabela A na área Observações


É permitido concatenar atributos.

No exemplo abaixo retornamos Diretórios + Arquivos de Sistema + Arquivos entre 10k e 20k:

  cAtributos := "D" // Inclui diretorios
  cAtributos += "S" // Inclui arquivos do sistema
  cAtributos += ":10000" // Lista arquivos/diretorios a partir do arquivo de nr 10.000
  aFiles := Directory("c:\tmp\10kk\*.*", cAtributos)

Para mais detalhes, consulte a Tabela A abaixo:

Informações
titleTabela A

Atribuito

Significado

H

Incluir arquivos ocultos

S

Incluir arquivos de sistema

D

Incluir diretórios

V

Procura pelo volume DOS e exclui outros arquivos

:N

(erro) A partir da build 7.00.131227A-20160630, visando economia de recursos, a função Directory esta limitada ao retorno de 10.000 itens.

Caso necessário visualizar itens que tenham uma "contagem" superior à 10.000 é possível utilizar o Atributo (dois pontos), ele trará itens de uma determinada posição até o limite de +10.000, veja o exemplo:

// Lista arquivos a partir da posição 10.000 (limitado a +10.000)
cAtributos := ":10000"
 
aFiles := Directory("c:\tmp\10kk\*.*", cAtributos)
...
// Lista arquivos a partir da posição 20.000 (limitado a +10.000)

cAtributos := ":20000"
 
aFiles := Directory("c:\tmp\10kk\*.*", cAtributos)
...



uParam1

numérico

Parâmetro de compatibilidade. Passar Nil, não deve ser preenchido.



lCaseSensitive

lógico

Indica se, verdadeiro (.T.), o nome do arquivo será transformado para letra maiúscula;
caso contrário, falso (.F.), o nome do arquivo será retornado conforme escrito no disco rígido.



nTypeOrder

numérico

Indica o tipo de ordenação do resultado da função.
*Apenas em build

Appserver

AppServer superiores a 7.00.131227A.

Para mais detalhes, consulte a Tabela B abaixo:

Informações
titleTabela B

Parâmetro

Tipo de ordenação

1

Ordenar por nome do arquivo

2

Ordenar por data do arquivo

3

Ordenar por tamanho do arquivo



Retorno

Nome

Tipo

Descrição

aRet

vetor

Retorna um array

de subarrays, sendo

que

cada subarray

contém informações sobre cada arquivo que atenda o parâmetro

(<cDirEsp>).

descrito em cAtributos

Para mais detalhes, consulte

a tabela B na área Observações.

Observações

Aviso
titleAtenção!
Quando executado via SmartClient HTML, o sistema não tem acesso aos arquivos da estação/cliente (Remote).
Aviso
titleAtenção!
Listar um diretório com muitos arquivos pode causar problemas de desempenho no Appserver, já que todos as suas informações serão transportados para um Array. A proporção é de, em média, 300MBs em apenas uma sessão a cada 100.000 arquivos. Por esse motivo, o comportamento da Directory foi alterada nos builds Appserver superiores a 7.00.131227A-20130404, limitada a 10.000 arquivos por chamada. Consulte abaixo maiores detalhes.
Aviso
titleAtenção!
A função tem uma limitação de apresentar apenas os primeiros 10.000 arquivos, sendo qualquer excedente ignorado.

 Tabela A - Atributos

...

Atribuito

...

Significado

...

H

...

Incluir arquivos ocultos

...

S

...

Incluir arquivos de sistema

...

D

...

Incluir diretórios

...

V

...

Procura pelo volume DOS e exclui outros arquivos

...

Tabela C abaixo:

Informações
titleTabela C

Importante
Arquivos normais são sempre incluídos na pesquisa, a não ser que "V" seja especificado.

...

Posição

Conteúdo

1

Nome do arquivo

2

Tamanho

3

Data

4

Hora

5

Atributos, exemplo A=Arquivo, D=Diretório

  • Caso seja especificado um path sem a unidade de disco, o mesmo será considerado no ambiente do servidor, a partir do RootPath do ambiente (caso o path comece com \ ou /), ou a partir do StartPath do ambiente (caso o path não seja iniciado com \ ou /).
  • Quando um path absoluto é especificado (com unidade de disco preenchida), a função será executada na estação em que o SmartClient está em execução.
  • O tipo de ordenação pode ser definido conforme tabela:

Tabela C - Ordenação

Parâmetro

Tipo de ordenação

1

Ordenar por nome do arquivo

2

Ordenar por data do arquivo

3

Ordenar por tamanho do arquivo

  • Essa função pode ser utilizada para realizar operações em conjuntos de arquivos. Ao utilizar essa função em conjunto com AEVal(), é possível definir um bloco de código que pode ser aplicado a todos os arquivos que atendam ao parâmetro especificado.
  • Para tornar as referências aos vários elementos de cada subarray de arquivo mais legíveis, a linguagem AdvPL fornece o arquivo header Fileio.ch, que contém os #DEFINES para os subarrays subscripts.
  • Em caso de a função ser listada em uma pasta onde contenha mais de 10.000 arquivos, é necessário usar a função de atributos para capturar os demais arquivos da pasta, conforme

Exemplos

Bloco de código
languagecpp
themeEclipse
titleExemplo 1
linenumberstrue
collapsefalse
User Function Exemplo1()
  Local aFiles := {}
  Local nX
  local nCount
  aFiles := Directory("c:\garbage\*.*", "D")
  nCount := Len( aFiles )
  For nX := 1 to nCount 
      ConOut('Arquivo: ' + aFiles[nX,1] + ' - Size: ' + AllTrim(Str(aFiles[nX,2])) )
  Next nX
Return

User Function Exemplo2()
  local F_NAME
  aDirectory := DIRECTORY("*.*", "D")
  F_NAME := Len(aDirectory)
  AEVAL(aDirectory, {|aFile| CONOUT(aFile[1])} )
Return

User Function Exemplo3()
  Local aFiles := {}
  local nCount
  Local nX
  local flagparameters := "D:10000" //lista os arquivos entre 10.000 e 20.000, inclusive diretórios
  aFiles := Directory("c:\tmp\10kk\*.*", flagparameters, 1)
  nCount := Len( aFiles )
  For nX := 1 to nCount
      ConOut('Arquivo: ' + aFiles[nX,1] + ' - Size: ' + AllTrim(Str(aFiles[nX,2])) )
  Next nX
Return 


Veja também