Sumário

# Serviço ScriptForge.FileSystem

O serviço FileSystem inclui rotinas para manusear arquivos e pastas. A seguir estão alguns exemplos do que pode ser feito com este serviço:

- Verificar se um arquivo existe ou não.

- Criar e apagar pastas e arquivos.

- Abrir caixas de diálogo para abrir/salvar arquivos.

- Acessar a lista de arquivos e pastas, etc.

Os métodos do serviço FileSystem são baseados principalmente na interface UNO XSimpleFileAccess.

## Definições

A tabela abaixo lista os principais parâmetros usados pela maior parte dos métodos do serviço FileSystem service.

Parâmetro | Descrição
--- | ---
FileName | Nome completo do arquivo incluindo o caminho sem o separador de pastas ao final.
FolderName | Nome completo da pasta incluindo o caminho. Pode ou não conter o caractere separador de pastas ao final.
Name | Último componente do Nome da Pasta ou Nome do Arquivo incluindo sua extensão. Este parâmetro é sempre expresso usando a notação nativa do sistema operacional em uso.
BaseName | Último componente do Nome da Pasta ou Nome do Arquivo sem sua extensão.
NamePattern | Qualquer um dos nomes acima contendo caracteres curinga em seu último componente. Os seguintes caracteres curinga são admitidos: "?" representa qualquer caractere único "*" representa zero, um ou múltiplos caracteres

O serviço FileSystem permite executar operações em múltiplos arquivo ao mesmo tempo. Ao usar padrões de nomes, scripts pode copiar, mover ou apagar múltiplos arquivos. Por outro lado, métodos internos da linguagem Basic podem manipular apenas um arquivo de cada vez.

### Notação de Nome de Arquivo

A notação usada para expressar nomes de arquivos e pastas, tanto para argumentos como para valores retornados, é definida pela propriedade FileNaming do serviço FileSystem.

Em suma, os possíveis tipos de representação são "URL" (notação de arquivo URL), "SYS" (notação do sistema operacional) e "ANY" (padrão). Veja mais informações abaixo.

Um exemplo de notação URL é file:///C:/Documents/my_file.odt. Sempre que possível considere usar a notação URL por ser uma alternativa mais portável.

O uso do atalho "~" (til), que é comum em sistemas operacionais baseados em Linux, não é suportado para expressar caminhos para uma pasta ou nome de arquivo. Em vez de usar "~/Documents/my_file.odt" use o caminho completo "/home/user/Documents/my_file.odt".

## Invocação do serviço

Os trechos de código abaixo invocam o serviço FileSystem. O método BuildPath foi usado como um exemplo.

##### Em Basic

          GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
          Dim FSO As Object
          Set FSO = CreateScriptService("FileSystem")
          FSO.BuildPath(...)

##### Em Python

          from scriptforge import CreateScriptService
          fs = CreateScriptService("FileSystem")
          fs.BuildPath(...)

## Acessando o Sistema Virtual de Arquivos de um Documento

Os arquivos de documentos do LibreOffice são arquivos ZIP compactados que contêm os arquivos e pastas que representam o conteúdo real do documento. Enquanto o documento estiver aberto, é possível acessar esse sistema de arquivos virtual, explorar sua estrutura, bem como ler e criar arquivos e pastas.

O exemplo a seguir mostra como criar um arquivo de texto chamado myFile.txt e armazená-lo no sistema virtual de arquivos do documento.

##### Em Basic

        GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
        Dim oDoc As Object, fso As Object, oFile As Object
        Dim sRoot, sFile, sMyDir
        Set fso = CreateScriptService("FileSystem")
        Set oDoc = CreateScriptService("Document", ThisComponent)
        ' Obtém o caminho para a raiz do sistema de arquivos virtual em notação URL
        sRoot = oDoc.FileSystem()
        sMyDir = sRoot & "myDir"
        ' Cria a pasta "myDir" se ela ainda não existir
        If Not fso.FolderExists(sMyDir) Then
            fso.CreateFolder(sMyDir)
        End If
        ' Cria o arquivo e escreve algum texto dentro dele
        sFile = fso.BuildPath(sMyDir, "myFile.txt")
        oFile = fso.CreateTextFile(sFile)
        oFile.WriteLine("Hello!")
        oFile.CloseFile()

##### Em Python

        from scriptforge import CreateScriptService
        bas = CreateScriptService("Basic")
        doc = CreateScriptService("Document", bas.ThisComponent)
        fso = CreateScriptService("FileSystem")
        sRoot = doc.FileSystem
        sMyDir = sRoot + "myDir"
        if not fso.FolderExists(sMyDir):
            fso.CreateFolder(sMyDir)
        sFile = fso.BuildPath(sMyDir, "myFile.txt")
        oFile = fso.CreateTextFile(sFile)
        oFile.WriteLine("Hello!")
        oFile.CloseFile()

Em geral, todos os métodos do serviço FileSystem podem ser usados para manipular arquivos no sistema virtual de arquivos do documento. No entanto, aplicam-se as seguintes restrições:

- Não é possível criar arquivos na pasta raiz. Use subpastas existentes ou crie novas pastas para armazenar arquivos no sistema de arquivos do documento.

- A notação FileNaming é sempre considerada como "URL".

- Os métodos CompareFiles, GetFileModified, HashFile, PickFile e PickFolder não são aplicáveis.

- O método GetFileLen sempre retorna zero.

- O método Normalize sempre retorna a string de entrada inalterada.

O caminho para o sistema virtual de arquivos não é um endereço físico no disco rígido do computador. Ele só pode ser acessado a partir de um script LibreOffice e só existe enquanto o arquivo do documento estiver aberto.

## Propriedades

Nome | Somente leitura | Tipo | Descrição
--- | --- | --- | ---
FileNaming | Não | String | Define ou retorna a notação atual para arquivos e pastas, podendo ser "ANY", "URL" ou "SYS": "ANY": (padrão) os métodos do serviço FileSystem aceitam tanto notação URL como a notação do sistema operacional em uso para argumentos de entrada, porém os valores de retorno sempre serão Strings URL. "URL": os métodos do serviço FileSystem assumem que a notação URL será usada para argumentos de entrada e retornarão Strings URL. "SYS": os métodos do serviço FileSystem assumirão que a notação do sistema operacional em uso será usada tanto para os argumentos de entrada como para os valores de retorno. Uma vez definida, a propriedade FileNaming permanecerá inalterada até o final da sessão LibreOffice ou até que seja definida novamente.
ConfigFolder | Sim | String | Retorna a pasta de configuração do LibreOffice.
ExtensionsFolder | Sim | String | Retorna a pasta onde as extensões estão instaladas.
HomeFolder | Sim | String | Retorna a pasta do usuário.
InstallFolder | Sim | String | Retorna a pasta de instalação do LibreOffice.
TemplatesFolder | Sim | String | Retorna a pasta contendo os arquivos de modelos do sistema.
TemporaryFolder | Sim | String | Retorna a pasta de arquivos temporários definida nas configurações de caminho do LibreOffice.
UserTemplatesFolder | Sim | String | Retorna a pasta contendo os arquivos de modelos definidos pelo usuário.

Lista de Métodos no Serviço FileSystem
BuildPath CompareFiles CopyFile CopyFolder CreateFolder CreateTextFile DeleteFile DeleteFolder ExtensionFolder | FileExists Files FolderExists GetBaseName GetExtension GetFileLen GetFileModified GetName GetParentFolderName | GetTempName HashFile MoveFile MoveFolder Normalize OpenTextFile PickFile PickFolder SubFolders

## BuildPath

Concatena um caminho para uma pasta e o nome de um arquivo e retorna o nome completo do arquivo com um separador de pastas válido. O separador de pastas é adicionado apenas se necessário.

### Sintaxe:

svc.BuildPath(foldername: str, name: str): str

### Parâmetros:

foldername: Caminho com o qual o parâmetro name será combinado. O caminho específico não precisa ser uma pasta existente.

name: Nome do arquivo a ser concatenado com o parâmetro foldername. Este parâmetro usa a notação do sistema operacional em uso.

### Exemplo:

##### Em Basic

          Dim FSO as Object
          Set FSO = CreateScriptService("FileSystem")
          Dim aFileName as String
          FSO.FileNaming = "URL"
          aFileName = FSO.BuildPath("file:///home/user", "sample file.odt")
          ' file:///home/user/sample%20file.odt

##### Em Python

          fs = CreateScriptService("FileSystem")
          fs.FileNaming = "URL"
          aFileName = fs.BuildPath("file:///home/user", "sample file.odt")
          # file:///home/user/sample%20file.odt

## CompareFiles

Compara dois arquivos e retorna True quando eles parecerem idênticos.

Dependendo do valor do argumento comparecontents, a comparação entre os dois arquivos pode ser baseada apenas nos atributos dos arquivos (tais como a última data de modificação), ou baseada nos conteúdos dos arquivos.

### Sintaxe:

svc.CompareFiles(filename1: str, filename2: str, comparecontents: bool = False): bool

### Parâmetros:

filename1, filename2: Arquivos a serem comparados.

comparecontents: Se True, os conteúdos dos arquivos são comparados (Padrão = False).

### Exemplo:

##### Em Basic

          FSO.FileNaming = "SYS"
          If FSO.CompareFiles("C:\myFile1.txt", "C:\myFile2.txt", CompareContents := False) Then
              ' ...
          End If

##### Em Python

          fs.FileNaming = "SYS"
          if fs.CompareFiles(r"C:\myFile1.txt", r"C:\myFile2.txt", comparecontents = False):
              # ...

## CopyFile

Copia um ou mais arquivos de uma localização para outra. Retorna True se pelo menos um arquivo foi copiado, ou retorna False se um erro ocorreu.

Um erro também ocorrerá se o parâmetro source usar caracteres curinga e não corresponder a arquivo algum.

O método é interrompido imediatamente se encontrar um erro. O método não é capaz de voltar atrás ou desfazer mudanças feitas antes da ocorrência do erro.

### Sintaxe:

svc.CopyFile(source: str, destination: str, overwrite: bool = True): bool

### Parâmetros:

source: Pode ser um nome de arquivo (FileName) ou um padrão de nomes (NamePattern) indicando um ou mais arquivos a serem copiados.

destination: Pode ser um nome de arquivo (FileName) especificando onde o arquivo único informado no argumento source deverá ser copiado, ou um nome de pasta (FolderName) dentro do qual os múltiplos arquivos definidos em source serão copiados.

- Se destination não existir, ele será criado.

- Caracteres curinga não são permitidos no parâmetro destination.

overwrite: Se True (padrão), arquivos podem ser sobrescritos. O método falhará se destination for somente leitura, independente do valor especificado para overwrite.

### Exemplo:

Nos exemplos abaixo a primeira linha copia um arquivo único, ao passo que a segunda linha copia múltiplos arquivos usando caracteres coringa.

##### Em Basic

          FSO.CopyFile("C:\Documents\my_file.odt", "C:\Temp\copied_file.odt")
          FSO.CopyFile("C:\Documents\*.*", "C:\Temp\", Overwrite := False)

##### Em Python

          fs.CopyFile(r"C:\Documents\my_file.odt", r"C:\Temp\copied_file.odt")
          fs.CopyFile(r"C:\Documents\*.*", r"C:\Temp", overwrite = False)

Esteja ciente de que as subpastas e seus conteúdos não são copiados quando curingas são usados no argumento source.

## CopyFolder

Copia uma ou mais pastas de uma localização para outra. Retorna True se pelo menos uma pasta foi copiada, ou retorna False se um erro ocorreu.

Um erro também ocorrerá se o parâmetro source usar caracteres curinga e não corresponder a pasta alguma.

O método é interrompido imediatamente se encontrar um erro. O método não é capaz de voltar atrás ou desfazer mudanças feitas antes da ocorrência do erro.

### Sintaxe:

svc.CopyFolder(source: str, destination: str, overwrite: bool = True): bool

### Parâmetros:

source: Pode ser um nome de pasta (FolderName) ou um padrão de nomes (NamePattern) indicando uma ou mais pastas a serem copiadas.

destination: Especifica o nome da pasta (FolderName) dentro da qual a pasta única ou múltiplas pastas definidas no parâmetro source serão copiadas.

- Se destination não existir, ele será criado.

- Caracteres curinga não são permitidos no parâmetro destination.

overwrite: Se True (padrão), arquivos podem ser sobrescritos. O método falhará se destination for somente leitura, independente do valor especificado para overwrite.

### Exemplo:

Nos exemplos abaixo todos os arquivos, pastas e subpastas são copiados.

          ' Basic
          FSO.CopyFolder("C:\Documents\*", "C:\Temp\", Overwrite := False)

          # Python
          fs.CopyFolder(r"C:\Documents\*", r"C:\Temp", overwrite = False)

## CreateFolder

Cria a pasta especificada em FolderName. Retorna True se a pasta pode ser criada com sucesso.

Se a pasta especificada tem uma pasta pai que não existe, então ela é criada.

### Sintaxe:

svc.CreateFolder(foldername: str): bool

### Parâmetros:

foldername: String representando a pasta a ser criada. Se a pasta já existir, uma exceção é lançada.

### Exemplo:

          ' Basic
          FSO.CreateFolder("C:\NewFolder")

          # Python
          fs.CreateFolder(r"C:\NewFolder")

## CreateTextFile

Cria o arquivo especificado e retorna uma instância do serviço TextStream que pode ser usada para escrever no arquivo.

O método retorna um objeto Null se um erro ocorreu.

### Sintaxe:

svc.CreateTextFile(filename: str, overwrite: bool = True, encoding: str = 'UTF-8'): svc

### Parâmetros:

filename: Nome do arquivo a ser criado.

overwrite: Valor booleano que determina se filename pode ser sobrescrito (Padrão = True).

encoding: Codificação de caracteres a ser usada. A codificação padrão é "UTF-8".

### Exemplo:

##### Em Basic

          Dim myFile As Object
          FSO.FileNaming = "SYS"
          Set myFile = FSO.CreateTextFile("C:\Temp\ThisFile.txt", Overwrite := True)

##### Em Python

          fs.FileNaming = "SYS"
          myFile = fs.CreateTextFile(r"C:\Temp\ThisFile.txt", overwrite = True)

Para saber mais sobre os nomes dos conjuntos de caracteres, visite a página IANA's Character Set (página somente no inglês). Note que o LibreOffice não implementa todos os conjuntos de caracteres existentes.

## DeleteFile

Apaga um ou mais arquivos. Retorna True se ao menos um arquivo pode ser apagado ou False se um erro ocorreu.

Um erro também ocorrerá se o parâmetro filename usar caracteres curinga e não corresponder a arquivo algum.

Os arquivos a serem apagados não podem ser somente leitura.

O método é interrompido imediatamente se encontrar um erro. O método não é capaz de voltar atrás ou desfazer mudanças feitas antes da ocorrência do erro.

### Sintaxe:

svc.DeleteFile(filename: str): bool

### Parâmetros:

filename: Pode ser um nome de arquivo (FileName) ou um padrão de nomes (NamePattern) indicando um ou mais arquivos a serem apagados.

### Exemplo:

Nos exemplos abaixo apenas arquivos são apagados. Subpastas não são apagadas.

          ' Basic
          FSO.DeleteFile("C:\Temp\*.docx")

          # Python
          fs.DeleteFile(r"C:\Temp\*.docx")

## DeleteFolder

Apaga uma ou mais pastas. Retorna True se ao menos uma pasta foi apagada ou False se um erro ocorreu.

Um erro também ocorrerá se o parâmetro foldername usar caracteres curinga e não corresponder a pasta alguma.

As pastas a serem apagadas não podem ser somente leitura.

O método é interrompido imediatamente se encontrar um erro. O método não é capaz de voltar atrás ou desfazer mudanças feitas antes da ocorrência do erro.

### Sintaxe:

svc.DeleteFolder(foldername: str): bool

### Parâmetros:

foldername: Pode ser um nome de pasta (FolderName) ou um padrão de nomes (NamePattern) indicando uma ou mais pastas a serem apagadas.

### Exemplo:

Nos exemplos a seguir apenas pastas e seus conteúdos são apagados. Arquivos na pasta pai "C:\Temp" não são apagados.

          ' Basic
          FSO.DeleteFolder("C:\Temp\*")

          # Python
          fs.DeleteFolder(r"C:\Temp\*")

## ExtensionFolder

Retorna uma string contendo o diretório onde a extensão especificada está instalada.

O valor atual da propriedade SF_FileSystem.FileNaming é usado para determinar a notação da string retornada.

Use a propriedade Extensions do serviço Platform para obter um Array de strings contendo as IDs de todas as extensões instaladas.

### Sintaxe:

svc.ExtensionFolder(extension: str): str

### Parâmetros:

extension: String com a ID da extensão.Se a extensão não estiver instalada, uma exceção é lançada.

### Exemplo:

Os exemplos abaixo em Basic e Python retornam a pasta onde a extensão APSO está instalada.

          ' Basic
          sFolder = FSO.ExtensionFolder("apso.python.script.organizer")
          ' file:///home/username/.config/libreoffice/4/user/uno_packages/cache/uno_packages/lu10833wz3u2i.tmp_/apso_1_2_7.oxt

          # Python
          sFolder = fs.ExtensionFolder("apso.python.script.organizer")

## FileExists

Retorna True se um dado nome de arquivo é válido e existe, caso contrário o método retorna False.

Se o parâmetro filename for na verdade um nome de pasta existente, o método retorna False.

### Sintaxe:

svc.FileExists(filename: str): bool

### Parâmetros:

filename: String representando o arquivo a ser testado.

### Exemplo:

##### Em Basic

          FSO.FileNaming = "SYS"
          If FSO.FileExists("C:\Documents\my_file.odt") Then
              '...
          End If

##### Em Python

          fs.FileNaming = "SYS"
          if fs.FileExists(r"C:\Documents\my_file.odt"):
              # ...

## Files

Retorna uma matriz baseada em zero (BASIC) ou tupla (Python) dos arquivos armazenados em uma determinada pasta. Cada entrada na matriz ou tupla é uma string que contém o caminho completo e o nome do arquivo.

Se o argumento foldername especificar uma pasta que não existe, uma exceção será lançada.

A lista resultante pode ser filtrada com caracteres curinga.

### Sintaxe:

svc.Files(foldername: str, filter: str = '', includesubfolders: bool = False): str[0..*]

### Parâmetros:

foldername: String representando uma pasta. A pasta deve existir. Este argumento não pode designar um arquivo.

filter: String contendo caracteres curinga ("?" e "*") que serão aplicados à lista de arquivos resultante (Padrão = "").

includesubfolders: Defina este argumento como True para incluir o conteúdo das subpastas (Padrão = False).

### Exemplo:

##### Em Basic

          Dim filesList As Variant, file As String
          FSO.FileNaming = "SYS"
          ' Retorna todos os arquivos que correspondem ao filtro "*.txt", incluindo arquivos em subpastas
          filesList = FSO.Files("/home/user/", "*.txt", IncludeSubfolders := True)
          For Each file In filesList
              ' ...
          Next file

##### Em Python

          fs.FileNaming = "SYS"
          filesList = fs.Files("/home/user/", "*.txt", includesubfolders = True)
          for file in fileList:
              # ...

## FolderExists

Retorna True se o nome de pasta especificado em FolderName é válido e existe, caso contrário o método retorna False.

Se o parâmetro foldername for na verdade um nome de arquivo existente, o método retorna False.

### Sintaxe:

svc.FolderExists(foldername: str): bool

### Parâmetros:

foldername: String representando a pasta a ser testada.

### Exemplo:

##### Em Basic

          FSO.FileNaming = "SYS"
          If FSO.FolderExists("C:\Documents\Thesis") Then
              '...
          End If

##### Em Python

          fs.FileNaming = "SYS"
          if fs.FolderExists(r"C:\Documents\Thesis")
              # ...

## GetBaseName

Retorna o BaseName (igual ao último componente) de uma pasta ou nome de arquivo, seu sua extensão.

O método não verifica se a pasta ou arquivo especificado existe.

### Sintaxe:

svc.GetBaseName(filename: str): str

### Parâmetros:

filename: String representando o nome do arquivo e seu caminho.

### Exemplo:

Nos exemplos abaixo, a primeira chamada do método GetBaseName corresponde a uma pasta, então a função retorna o último componente do caminho. A segunda chamada recebe um nome de arquivo como entrada, então o nome do arquivo é retornado sem sua extensão.

##### Em Basic

          MsgBox FSO.GetBaseName("/home/user/Documents") ' "Documents"
          MsgBox FSO.GetBaseName("/home/user/Documents/my_file.ods") ' "my_file"

##### Em Python

          bas = CreateScriptService("Basic")
          bas.MsgBox(fs.GetBaseName("/home/user/Documents")) # "Documents"
          bas.MsgBox(fs.GetBaseName("/home/user/Documents/my_file.ods")) # "my_file"

## GetExtension

Retorna a extensão de um nome de arquivo ou pasta sem o caractere "." ponto.

O método não verifica a existência da pasta ou arquivo especificado.

Se o método for aplicado a uma pasta ou arquivo que não possui extensão, então uma String vazia é retornada.

### Sintaxe:

svc.GetExtension(filename: str): str

### Parâmetros:

filename: String representando o nome do arquivo e seu caminho.

### Exemplo:

          ' Basic
          ext = FSO.GetExtension("C:\Windows\Notepad.exe")  ' "exe"

          # Python
          ext = fs.GetExtension(r"C:\Windows\Notepad.exe")  # "exe"

## GetFileLen

A função interna Basic FileLen retorna o número de bytes contidos em um arquivo como um valor do tipo Long, ou seja, com até 2GB.

O método GetFileLen consegue manipular arquivos com tamanhos maiores pois retorna um valor do tipo Currency.

### Sintaxe:

svc.GetFileLen(filename: str): num

### Parâmetros:

filename: String representando um arquivo existente.

### Exemplo:

##### Em Basic

          Dim fLen As Currency
          FSO.FileNaming = "SYS"
          fLen = FSO.GetFileLen("C:\pagefile.sys")

##### Em Python

          fs.FileNaming = "SYS"
          fLen = fs.GetFileLen(r"C:\pagefile.sys")

## GetFileModified

Retorna a última data de modificação de um dado arquivo.

### Sintaxe:

svc.GetFileModified(filename: str): datetime

### Parâmetros:

filename: String representando um arquivo existente.

### Exemplo:

##### Em Basic

          Dim aDate As Date
          FSO.FileNaming = "SYS"
          aDate = FSO.GetFileModified("C:\Documents\my_file.odt")

##### Em Python

          fs.FileNaming = "SYS"
          aDate = FSO.GetFileModified(r"C:\Documents\my_file.odt")

## GetName

Retorna o último componente de um arquivo ou pasta usando o formato nativo do sistema operacional em uso.

O método não verifica se a pasta ou arquivo especificado existe.

### Sintaxe:

svc.GetName(filename: str): str

### Parâmetros:

filename: String representando o nome do arquivo e seu caminho.

### Exemplo:

          ' Basic
          a = FSO.GetName("C:\Windows\Notepad.exe")  ' Notepad.exe

          # Python
          a = fs.GetName(r"C:\Windows\Notepad.exe")  # Notepad.exe

## GetParentFolderName

Retorna uma String contendo o nome da pasta pai de um dado nome de arquivo ou pasta.

O método não verifica se a pasta ou arquivo especificado existe.

### Sintaxe:

svc.GetParentFolderName(filename: str): str

### Parâmetros:

filename: String com o nome do arquivo ou pasta a ser analisado.

### Exemplo:

          ' Basic
          a = FSO.GetParentFolderName("C:\Windows\Notepad.exe")  ' C:\Windows\

          # Python
          a = fs.GetParentFolderName(r"C:\Windows\Notepad.exe")  # C:\Windows\

## GetTempName

Retorna um nome de arquivo temporário gerado aleatoriamente que pode ser útil para executar operações que requerem arquivos temporários.

Por padrão, o nome do arquivo retornado não possui extensão. Use o parâmetro extension para especificar a extensão do nome do arquivo a ser gerado.

A parte da pasta da string retornada é a pasta temporária do sistema.

O método não cria o arquivo temporário.

### Sintaxe:

svc.GetTempName(extension: str): str

### Parâmetros:

extension: A extensão do nome do arquivo temporário (Padrão = "").

### Exemplo:

##### Em Basic

          Dim fName As String
          FSO.FileNaming = "SYS"
          fName = FSO.GetTempName(Extension := "txt")
          ' "/tmp/SF_574068.txt"

##### Em Python

          fs.FileNaming = "SYS"
          fName = FSO.GetTempName(extension = "txt")
          # "/tmp/SF_574068.txt"

## HashFile

Funções hash são usadas por alguns algoritmos criptográficos, em assinaturas digitais, códigos de autenticação de mensagens, detecção de fraudes, impressões digitais, verificação de integridade de mensagens, tabelas hash, armazenamento de senhas e muito mais.

O método HashFile retorna o resultado da função hash aplicada em um dado arquivo usando o algoritmo escolhido. O valor retornado é uma String com caracteres hexadecimais minúsculos.

Os algoritmos hash suportados são: MD5, SHA1, SHA224, SHA256, SHA384 e SHA512.

### Sintaxe:

svc.HashFile(filename: str, algorithm: str): str

### Parâmetros:

filename: String representando um arquivo existente.

algorithm: Um dos algoritmos suportados.

### Exemplo:

          ' Basic
          sHash = FSO.HashFile("C:\pagefile.sys", "MD5")

          # Python
          sHash = FSO.HashFile(r"C:\pagefile.sys", "MD5")

## MoveFile

Move um ou mais arquivos de uma localização para outra. Retorna True se pelo menos um arquivo foi movido, ou retorna False se um erro ocorreu.

Um erro também ocorrerá se o parâmetro source usar caracteres curinga e não corresponder a arquivo algum.

O método é interrompido imediatamente se encontrar um erro. O método não é capaz de voltar atrás ou desfazer mudanças feitas antes da ocorrência do erro.

### Sintaxe:

svc.MoveFile(source: str, destination: str): bool

### Parâmetros:

source: Pode ser um nome de arquivo (FileName) ou um padrão de nomes (NamePattern) indicando um ou mais arquivos a serem movidos.

destination: Se source for um nome de arquivo (FileName) então este parâmetro indica o novo caminho e nome do arquivo que foi movido.

Se a operação de movimentação envolver múltiplos arquivos, então o parâmetro destination deve ser um nome de pasta. Se a pasta não existir, ela será criada.

Se source e destination possuírem a mesma pasta pai, o método renomeará source.

Caracteres curinga não são permitidos no parâmetro destination.

### Exemplo:

Nos exemplos a seguir apenas arquivos são movidos. Subpastas não são movidas.

          ' Basic
          FSO.MoveFile("C:\Temp1\*.*", "C:\Temp2")

          # Python
          fs.MoveFile(r"C:\Temp1\*.*", r"C:\Temp2")

## MoveFolder

Move uma ou mais pastas de uma localização para outra. Retorna True se pelo menos uma pasta foi movida, ou retorna False se um erro ocorreu.

Um erro também ocorrerá se o parâmetro source usar caracteres curinga e não corresponder a pasta alguma.

O método é interrompido imediatamente se encontrar um erro. O método não é capaz de voltar atrás ou desfazer mudanças feitas antes da ocorrência do erro.

### Sintaxe:

svc.MoveFolder(source: str, destination: str): bool

### Parâmetros:

source: Pode ser um nome de pasta (FolderName) ou um padrão de nomes (NamePattern) indicando uma ou mais pastas a serem movidas.

destination: Se a operação de movimentação envolver uma pasta única, então o parâmetro destination será considerado como o nome e caminho da pasta movida, portanto não deve existir.

Se múltiplas pastas estão sendo movidas, então destination define para onde as pastas em source serão movidas. Se a pasta destination não existir, ela será criada.

Caracteres curinga não são permitidos no parâmetro destination.

### Exemplo:

          ' Basic
          FSO.MoveFolder("C:\Temp1\*", "C:\Temp2")

          # Python
          fs.MoveFolder(r"C:\Temp1\*", r"C:\Temp2")

## Normalize

Retorna uma string contendo o nome do caminho normalizado, recolhendo separadores redundantes e referências de nível superior.

Por exemplo, os nomes de caminho A//B, A/B/, A/./B e A/foo/ ../B são todos normalizados para A/B.

No Windows, as barras "/" são convertidas em barras invertidas "\".

O valor atual da propriedade SF_FileSystem.FileNaming é usado para determinar a notação do argumento filename, bem como o formato da string retornada.

### Sintaxe:

svc.Normalize(filename: str): str

### Parâmetros:

filename: uma string que representa um nome de caminho válido. O arquivo ou diretório representado por este argumento pode não existir.

### Exemplo:

##### Em Basic

        FSO.FileNaming = "URL"
        ' file:///home/user/Documents
        normPath = FSO.Normalize("file:///home/user/Documents/")
        ' file:///home/user/Documents
        normPath = FSO.Normalize("file:///home//user//Documents/")
        ' file:///home/user
        normPath = FSO.Normalize("file:///home//user//Documents/../")

##### Em Python

        fs.FileNaming = "URL"
        normPath = fs.Normalize("file:///home/user/Documents/")
        normPath = fs.Normalize("file:///home//user//Documents/")
        normPath = fs.Normalize("file:///home//user//Documents/../")

## OpenTextFile

Abre um arquivo e retorna um objeto TextStream que pode ser usado para ler, escrever ou acrescentar valores a um arquivo de texto.

Note que o método não verifica se um dado arquivo é realmente um arquivo texto.

Este método retorna um objeto Null (em Basic) ou None (em Python) se algum erro ocorreu.

### Sintaxe:

svc.OpenTextFile(filename: str, iomode: int = 1, create: bool = False, encoding: str = 'UTF-8'): svc

### Parâmetros:

filename: Especifica o arquivo a ser aberto.

iomode: Indica o modo de entrada e saída. Pode ser uma de três constantes: svc.ForReading (padrão), svc.ForWriting, ou svc.ForAppending.

create: Valor booleano que indica se um novo arquivo pode ser criado se o nome de arquivo especificado em filename não existir:

- Se True um novo arquivo e suas pastas pais são criadas se não existirem ainda.

- Se False então novos arquivos não são criados (padrão).

encoding: Codificação de caracteres a ser usada. A codificação padrão é "UTF-8".

### Exemplo:

##### Em Basic

          Dim myFile As Object
          FSO.FileNaming = "SYS"
          Set myFile = FSO.OpenTextFile("C:\Temp\ThisFile.txt", FSO.ForReading)
          If Not IsNull(myFile) Then
              ' ...
          End If

##### Em Python

          fs.FileNaming = "SYS"
          myFile = fs.OpenTextFile(r"C:\Temp\ThisFile.txt", fs.ForReading)
          if myFile is not None:
              # ...

## PickFile

Mostra uma caixa de diálogo para abrir ou salvar arquivos.

Se o modo SAVE estiver definido e o arquivo escolhido existir, um alerta será apresentado.

### Sintaxe:

svc.PickFile(defaultfile: str ='', mode: str = 'OPEN', filter: str = ''): str

### Parâmetros:

defaultfile: Este argumento é uma String composta por um nome de pasta e arquivo:

- A parte referente à pasta indica qual pasta será mostrada quando o diálogo for aberto (padrão = última pasta selecionada).

- A parte referente ao arquivo especifica o nome do arquivo padrão a ser aberto ou salvo.

mode: Uma string contendo o valor "OPEN" (para arquivos de entrada) ou "SAVE" (para arquivos de saída). O valor padrão é "OPEN".

filter: Usado para definir a extensão dos arquivos mostrados quando o diálogo é aberto (Padrão = sem filtro).

### Exemplo:

Os exemplos abaixo abrem o selecionador de arquivos com o filtro "txt" aplicado.

          ' Basic
          aFile = FSO.PickFile("C:\Documents", "OPEN", "txt")

          # Python
          aFile = fs.PickFile(r"C:\Documents", "OPEN", "txt")

## PickFolder

Abre uma caixa de diálogo para escolher uma pasta

### Sintaxe:

svc.PickFolder(defaultfolder: str = '', freetext: str = ''): str

### Parâmetros:

defaultfolder: String contendo o nome da pasta que será apresentada quando a caixa de diálogo for aberta (Padrão = última pasta selecionada).

freetext: Texto a ser mostrado na caixa de diálogo (Padrão = "").

### Exemplo:

          ' Basic
          aFolder = FSO.PickFolder("C:\Documents", "Escolha uma pasta ou pressiona Cancelar")

          # Python
          aFolder = fs.PickFolder(r"C:\Documents", "Escolha uma pasta ou pressione Cancelar")

## SubFolders

Retorna um array de strings indexado em zero com os nomes das pastas armazenadas em um dado foldername.

A lista pode ser filtrada usando caracteres curinga.

### Sintaxe:

svc.SubFolders(foldername: str, filter: str = '', includesubfolders: bool = False): str[0..*]

### Parâmetros:

foldername: String representando uma pasta. A pasta deve existir. foldername não pode designar um arquivo.

filter: String contendo caracteres curinga ("?" e "*") que serão aplicados à lista de pastas resultante (Padrão = "").

includesubfolders: Defina este argumento como True para incluir o conteúdo das subpastas (Padrão = False).

### Exemplo:

##### Em Basic

          Dim folderList As Variant, folder As String
          FSO.FileNaming = "SYS"
          folderList = FSO.SubFolders("/home/user/")
          For Each folder In folderList
              ' ...
          Next folder

##### Em Python

          fs.FileNaming = "SYS"
          folderList = fs.SubFolders("/home/user/")
          for folder in folderList:
              # ...

Todas as rotinas ou identificadores do ScriptForge em Basic que possuem o caractere "_" como prefixo são reservadas para uso interno. Elas não devem ser usadas em macros escritas em Basic ou em Python.

Tópicos relacionados

Serviço ScriptForge.TextStream

Função de Input [VBA]

Instrução Open