Á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 ], [ lCaseSensitivelConvertCase ], [ nTypeOrder ] )

Parâmetros

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, para pesquisa.
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 é *.*.

X

cAtributos

caractere

Indica quais arquivos com atributos especiais 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.

uParam1

numérico

Parâmetro de compatibilidade. Passar Nil.

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 superiores a 7.00.131227A.

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 (<cDirSpec>). Para mais detalhes, consulte a tabela B na área Observações.

( *.* )

  • 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 tipos de arquivos/diretórios devem ser incluídos no array.
É permitido concatenar atributos.

No exemplo abaixo retornamos Diretórios + Arquivos de Sistema + Arquivos entre as posições 10.000 e 20.000:

  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

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.

...

Informa caso necessite o arquivo 10001 em diante. Ex: informar ":10000" por exemplo para os proximos 10.000 arquivos (Comportamento em build superior a 131227). Esse parâmetro dever ser obrigatoriamente o ultimo.

Atribuito

Significado

H

Incluir arquivos ocultos

S

Incluir arquivos de sistema

D

Incluir diretórios

V

Procura pelo volume DOS e exclui outros arquivos
Dada exclusão dos demais tipos de arquivos o parâmetro V deve ser usado com cautela. 

:N

(erro) A partir da build 7.00.

131227A-20160630

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

Tabela B - Estrutura dos subarrays

Posição

Meta simbolo

directory.ch

1

cNome

F_NAME

2

cTamanho

F_SIZE

3

dData

F_DATE

4

cHora

F_TIME

5

cAtributos

F_ATT

  • 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:

...

, 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, não deve ser preenchido.



lConvertCase

lógico

Se verdadeiro (.T.), os nomes de arquivos presentes serão retornados todos em MAIÚSCULO.

Caso falso (.F.), os nomes de arquivos presentes são retornados como estão no disco rígido.



nTypeOrder

numérico

Indica o tipo de ordenação do resultado da função.
*Apenas em build 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 que contém informações sobre cada arquivo / diretório que atenda aos requisitos
descritos no parâmetro cAtributos, passado na chamada da função. 

Tabela C (abaixo), descreve a estrutura do array de retorno:
Informações
titleTabela C

Posição

Conteúdo

1

Nome do arquivo

2

Tamanho

3

Data

4

Hora

5

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

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