Saltar para o conteúdo principal
Versão: 20

Pathnames

As funções, propriedades e comandos de File e Folders permitem tratar arquivos e pastas como objetos. Isto torna a gestão de arquivos e pastas poderosa e flexível. Por exemplo, para criar um novo arquivo na pasta Documentos do utilizador atual, pode escrever:

$ok:=Folder(fk documents folder).file("Archives/John4D.prefs").create()

Além disso, os objectos de arquivos e pastas suportam fileSystems, que fornecem o caminho contextual para as pastas principais da aplicação.

4D aceita vários filesystem pathnames que designam pastas 4D específicas com localização variável em macOS e Windows. A filesystem path is evaluated with regards to the context and is returned as an absolute path.

Os nomes de caminho do sistema de arquivos são úteis por duas razões principais:

  • Independência: Pode mover a sua solução de um local para outro, independentemente do sistema operativo, sem ter de se preocupar com caminhos,
  • Segurança: Nenhum código pode acessar elementos localizados acima da raiz do sistema de arquivos no disco (sandboxing).

São compatíveis os seguintes nomes de caminho do sistema de arquivos:

filesystemDesignaExemplo
"/DATA"Pasta de dados actual"C:\MyApps\Students\Data\"
"/LOGS"Pasta Logs"C:\MyApps\Students\Data\Logs\"
"/PACKAGE"Pasta de raiz do projeto (com ou sem extensão 4dbase)"C:\MyApps\Students\"
"/PROJECT"Pasta Project"C:\MyApps\Students\Project\"
"/RESOURCES"Pasta de recursos do projeto atual"C:\MyApps\Students\Resources\"
"/SOURCES"Pasta de fontes do projeto atual"C:\MyApps\Students\Project\Sources\"

Sintaxe POSIX

A sintaxe POSIX é suportada em todas as plataformas. A sintaxe POSIX é recomendada por ser a mais flexível. É utilizado por predefinição (devolvido pelas propriedades file.path e folder.path).

Com esta sintaxe:

  • as pastas são separadas por "/"
  • os nomes de caminho absolutos começam com um "/"
  • para subir uma pasta num caminho relativo, utilize "../" à frente do nome do caminho (por segurança, não pode subir no sistema de arquivos).

Na sintaxe POSIX, utiliza-se geralmente filesystem pathnames com os comandos File e Folder , por exemplo:

var $pathFile : 4D.File
var $pathFolder : 4D.Folder

$pathFile:=File("/DATA/Archives/file 2.txt")
$pathFolder:=Folder("/RESOURCES/Pictures")

Sintaxe específica da plataforma

A sintaxe específica da plataforma depende do sistema operativo em que o comando é executado. Note-se que, ao criar um objeto de ficheiro ou pasta com esta sintaxe, é necessário declará-lo utilizando como parâmetro a constante fk platform path .

Windows

São suportados os seguintes padrões:

  • os separadores de pasta são ""
  • the text contains ':' and '' as the second and third character,
  • o texto começa por "\".

Exemplos com Folder:

$ok:=Folder("C:\\Monday";fk platform path).create()
$ok:=Folder("\\\\svr-internal\\tempo";fk platform path).create()

Entering Windows pathnames and escape sequences

A linguagem 4D permite a utilização das sequências de escape . As sequências de fuga começam com uma barra invertida \, seguida de um carácter. Por exemplo, \t é a sequência de escape para o carácter Tab .

Uma vez que o carácter \ também é utilizado como separador nos nomes de caminho no Windows, é necessário introduzir um duplo \\ nos nomes de caminho do Windows.

macOS

São suportados os seguintes padrões (sintaxe HFS+):

  • os separadores de pasta são ":"
  • o caminho não deve começar com um ":"

Exemplos com Folder:

$ok:=Folder("macintosh hd:";fk platform path).create()
$ok:=Folder("Monday:Tuesday";fk platform path).create() //a volume deve ser chamado Monday

Nomes de caminho absolutos e relativos

Construtores File e Folder

Os comandos File e Folder só aceitam nomes de caminho absolutos. Os nomes de caminho relativos não são suportados e devolverão erros. Por exemplo, o seguinte código não é permitido:

    //ERROR
$ko:=Folder("myFolder").create() //nome do caminho relativo com construtor

Se quiser tratar a arquivos pastas em várias localizações (pasta do projeto, pastas do sistema, etc.), pode utilizar os filesystems (ver acima). Por exemplo, pode escrever:

$okFolder:=Folder("/PACKAGE/myFolder").create() //pasta criada ao nível da estrutura
$okFile:=File("/DATA/Prefs/tempo.txt").create() //ficheiro criado na pasta de dados

.file() and .folder() folder methods

As funções dos objetos pasta, tais como folder.file() e folder.folder() esperam nomes de caminho POSIX relativos. Por exemplo:

var $userImages : 4D.Folder
var $ok : Boolean

//to reference a "Picture" folder within the user documents folder
$userImages:=Folder(fk documents folder).folder("Pictures")
//to create a folder on the desktop
$ok:=Folder(fk desktop folder).folder("myFolder").create()

Os nomes de caminho absolutos não são suportados e devolverão erros.

Exemplos

A flexibilidade das funções de arquivos e pastas oferece-lhe várias possibilidades de tratamento de arquivos e pastas, como nos exemplos seguintes:

var $fold : 4D.Folder
var $file : 4D.File

$fold:=Folder(fk desktop folder).folder("archive/jan2019")
$fold:=Folder("/DATA/archive/jan2019")
$file:=Folder("/DATA/archive/jan2019").file("total.txt")
$file:=File("/DATA/info.txt")
$file:=File("c:\\archives\\local\\jan2019.txt";fk platform path)
$file:=File(fk backup log file)