A quem este FAQ é destinado?
Este FAQ só terá utilidade atualmente para quem desenvolve instaladores e mods pelo Flow.
O que é Core?
No Flow, Core é o nome de um namespace. Consiste em um conjunto de métodos que permitem realizar o processo de instalação de uma tradução ou mod.
O Core é dividido em várias class para melhor organizar o espaço e deixá-lo mais intuitivo.
Abaixo serão listados e exemplificados os métodos em cada class. Lembre-se que existem métodos com mesmo nome mas com signatures diferentes. Este recurso é chamado de overload.
Core.Directory
Esta class é responsável por métodos de diretório.
Core.Directory.Delete
2 overloads
Core.Directory.Delete(string path):void
Apaga um diretório, se houver arquivos ou subpastas também serão removidos recursivamente. Se o diretório não existir, não acontece nada.
Core.Directory.Delete(string path, bool onlyIfEmpty):void
Idêntica à função acima, todavia se o parâmetro onlyIfEmpty for verdadeiro. Só apagará o diretório se ele estiver vazio. Um diretório é considerado não vazio se tiver ao menos um arquivo, isto é, se houver apenas subpastas vazias, o diretório é vazio.
Core.Directory.Exists
Core.Directory.Exists(string path):bool
Retorna um valor booleano (verdadeiro ou falso) indicando se um diretório existe.
Core.Directory.GetDirectories
2 overloads
Core.Directory.GetDirectories(string path):string[]
Retorna uma lista de pastas contidas no primeiro nível no diretório path. Se o diretório não existir ou se nenhuma subposta existir, retorna uma array de string de comprimento zero. string[0].
Core.Directory.GetDirectories(string path, bool allDirectories):string
Idêntico ao método acima, se o parâmetro allDirectories for verdadeiro, exibirá as subpastas em todos os níveis, não apenas no primeiro.
Exemplo
Considere a seguinte estrutura de arquivos
C:/GameVicio/Jogos
C:/GameVicio/Jogos/Trine
C:/GameVicio/Flow
Core.Directory.GetDirectories("C:/GameVicio") retorna string[2]{"Jogos", "Flow"}.
Core.Directory.GetDirectories("C:/GameVicio",true) retorna string[3]{"Jogos","Jogos/Trine","Flow"}.
Core.File
Esta class é responsável por métodos de arquivo.
Core.File.Copy
2 overloads
Core.Directory.Copy(string sourceFileName, string destFileName):void
Copia o arquivo da origem (sourceFileName) para o destino (destFileName). Se o arquivo de origem não existir, será encerrado. Se o arquivo de destino existir, será sobrescrito, se não existir será criado juntamente com toda a estrutura de diretório (se não houver).
Core.Directory.Copy(string sourceFileName, string destFileName, bool onlyIfDestExists):void
Idêntico ao método acima, exceto que se o parâmetro onlyIfDestExists for definido como true, o arquivo só será copiado se o arquivo de destino destFileName existir.
Core.File.Delete
Core.File.Delete(string path):void
Apaga um arquivo. Não é gerado err se o arquivo não existir.
Core.File.Exists
Core.File.Exists(string path):bool
Retorna um valor booleano (verdadeiro ou falso) indicando se um arquivo existe.
Core.File.GetContents
Core.File.GetContents(string path,ContentType contentType):object
Retorna todo o conteúdo do arquivo cujo caminho é informado em path. O valor de contentType pode ser.
Valor | Objeto de retorno | Descrição |
ContentType.String | string | Retorna todo o conteúdo em uma única string |
ContentType.StringArray | string[] | Cada linha do arquivo é colocada como um item do array |
ContentType.ByteArray | byte[] | Todo o conteúdo do arquivo é convertido em um array de bytes |
Exemplo
string[] lines = (string[])Core.File.GetContent("c:\\arquivos de programas\\gta\\log.txt",ContentType.StringArray)
Note que como o retorno do método é um objeto, você precisa fazer um casting para poder trabalhar com ele.
Core.File.GetDirectoryName
Core.File.GetDirectoryName(string path):string
Retorna uma string com o caminho do diretório. Se o arquivo não existir ou qualquer outro erro acontecer, retorna uma string vazia.
Core.File.Rename
Core.File.Rename(string sourceFileName, string destFileName):void
Renomeia o arquivo sourceFileName para destFileName. Se o arquivo de origem não existir, encerra o processo. Se o arquivo de destino já existir, será sobrescrito.
Core.INI
Esta class é responsável por métodos que lidam com arquivos INI.
Core.INI.Read
2 overloads
Core.INI.Read(string file, string section, string parameter,Encoding encoding):string
Este método lê o valor de um parâmetro em uma determinada section. ?? importante ressaltar que o arquivo ini precisa de ao menos uma section para que o código possa ser lido.
file: caminho do arquivo
section: nome da seção
parameter: nome do parâmetro
encoding: codificação do arquivo
O encoding pode receber os seguintes valores:
Valor | Descrição |
Encoding.ASCII | Utiliza codificação ASCII (7-bit) |
Encoding.Default | Utiliza a codificação padrão do sistema operacional |
Encoding.Unicode | Utiliza a codificação Unicode, isto é, UTF16 |
Encoding.UTF32 | Utiliza a codificação UTF32 |
Encoding.UTF7 | Utiliza a codificação UTF7 |
Encoding.UTF8 | Utiliza a codificação UTF8 |
Core.INI.Read(string file, string section, string parameter):string
Idêntico ao método acima, todavia não tenta forçar a codificação de leitura do arquivo.
Core.INI.Write
2 overloads
Core.INI.Write(string file, string section, string parameter, object value, Encoding encoding):void
Escreve o conteúdo de value em no parâmetro de uma seção em um arquivo. Se o arquivo, seção e/ou parâmetro não existirem, serão criados. O valor de encoding segue o mesmo sistema da tabela de leitura acima.
Core.INI.Write(string file, string section, string parameter,object value):void
Idêntico ao método acima, todavia não tenta forçar a codificação de escrita do arquivo.
Core.LZO
Esta class é responsável por métodos de compressão em LZO.
Core.LZO.Compress
2 overloads
Core.LZO.Compress(byte[] source):byte[]
O array de bytes passado como parâmetro é comprimido e retornado.
Core.LZO.Compress(byte[] source,out byte[] destination):void
Idêntico ao método acima, só que ao invés de retornar o array de bytes comprimidos, ele é armazenado na variável destination passada por referência (através da palavra reservada out).
Core.LZO.Decompress
Core.LZO.Decompress(byte[] source, byte[] destination):void
Descomprime um array de bytes contido na variável source e armazena o resultado na variável destination.
Core.Registry
Esta class é responsável por métodos de leitura e escrita do registro do Windows.
O valor de RootKey usado em todos os métodos desta class são:
Valor RootKey | Valor string longa | Valor string curta |
RootKey.HKEY_CLASSSES_ROOT | "HKEY_CLASSSES_ROOT" | "HKCR" |
RootKey.HKEY_CURRENT_USER | "HKEY_CURRENT_USER" | "HKCU" |
RootKey.HKEY_LOCAL_MACHINE | "HKEY_LOCAL_MACHINE" | "HKLM" |
RootKey.HKEY_USERS | "HKEY_USERS" | "HKU" |
RootKey.HKEY_CURRENT_CONFIG | "HKEY_CURRENT_CONFIG" | "HKCC" |
Core.Registry.Delete
2 overloads
Core.Registry.Delete(RootKey rootKey, string subKey, bool onlyIfEmpty):void
Apaga um registro, se o parâmetro onlyIfEmptty for verdadeiro e o registro tiver filhos, não será apagado.
Exemplo:
Este exemplo apaga a chave do Flow somente se estiver vazia.
Core.Registry.Delete(RootKey.HKEY_LOCAL_MACHINE,"SOFTWARE\\Wow6432Node\\GameVicio\\Flow",true);
Core.Registry.Delete(string rootKey, string subKey, bool onlyIfEmpty):void
Idêntico ao método acima, exceto que ao invés de usar RootKey para refenciar uma chave raíz, utiliza-se uma string.
Exemplo:
Este exemplo apaga a chave do Flow somente se estiver vazia.
Core.Registry.Delete("HKLM","SOFTWARE\\Wow6432Node\\GameVicio\\Flow",true);
Core.Registry.Exists
2 overloads
Core.Registry.Exists(RootKey rootKey, string subKey):bool
Retorna um valor booleano indicando se a chave existe. ?? importante ressaltar que para motivos de compatibilidade com todos os sistemas operacionais Windows, registros contidos em HKEY_LOCAL_MACHINE\SOFTWARE também são verificados em HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node chave disponível em SOs 64 bits.
Core.Registry.Exists(string rootKey, string subKey):bool
Idêntico ao método acima, exceto que rootKey deve ser passado como string.
Core.Registry.GetSubKeys
2 overloads
Core.Registry.GetSubKeys(RootKey rootKey, string subKey):string[]
Gera um array de string com o nome das subchaves (filhos) de uma chave. Se a chave não existir ou não tiver subchaves, gera um array de comprimento zero (string[0]).
Core.Registry.GetSubKeys(string rootKey, string subKey):string[]
Idêntico ao método acima.
Core.Registry.Read
2 overloads
Core.Registry.Read(RootKey rootKey, string subKey, string value):object
Lê o valor do parâmetro de um registro. O retorno é object, então para trabalhar com ele provavelmente será necessário um casting. Em caso de erro, retorna um objeto do tipo string mas vazio.
Core.Registry.Read(string rootKey, string subKey, string value):object
Idêntico ao método acima.
Core.Registry.Write
2 overloads
Core.Registry.Write(RootKey rootKey, string subKey, string name, object value, ValueKind valueKind):void
Escreve um parâmetro em uma chave. Se a chave (e subchaves) não existir, será criada. Se o parâmetro não existir será adicionado ou então sobrescrito. ?? importante ressaltar que em modelos 64 bits, diferente do método Core.Registry.Read, é preciso informar a chave Wow6432Node - neste caso, é recomendável verificar a existência da chave com o método Core.Registry.Exists especificando o caminho Wow6432Node.
O objeto ValueKind representa o tipo de dado a ser armazenado. O formato usado na maioria das vezes é do tipo string.
Valor ValueKind | Valor string | Descrição |
---|---|---|
ValueKind.Binary | "Binary" | Dado do tipo binário |
ValueKind.DWord | "DWord" | |
ValueKind.ExpandString | "ExpandString" | |
ValueKind.MultiString | "MultiString" | |
ValueKind.QWord | "QWord" | |
ValueKind.String | "String" | Dado do tipo string, é o formato mais usado |
ValueKind.Unknown | "Unknown" |
Exemplo
Este exemplo mostra como escrever um valor no registro
Core.Registry.Write(RootKey.RootKey.HKEY_LOCAL_MACHINE,"SOFTWARE\\Wow6432Node\\GameVicio\\Flow", "Language", "Português", ValueKind.String);
Core.Registry.Write(string rootKey, string subKey, string name, object value, string valueKind):void
Idêntico ao método acima.
Exemplo
Core.Registry.Write("HKLM","SOFTWARE\\Wow6432Node\\GameVicio\\Flow", "Language", "Português", "String");
Core.Zip
Esta class é responsável por métodos de criação e extração de arquivos Zip.
Core.Zip.Build
2 overloads
Core.Zip.Build(string sourceFolder, string fileDest, string[] onlyFiles):void
Cria um arquivo zip no caminho fileDest a partir do conteúdo da pasta sourceFolder, todavia somente os arquivos contidos em onlyFiles serão armazenados.
Exemplo
Cria um zip chamado sound.zip contendo os arquivos audio1.mp3 e audio2.mp3
Core.Zip.Build("C:\\Gta iv\\sound","C:\\Gta iv\\sound.zip",string[2]{"C:\\Gta iv\\sound\\audio1.mp3","C:\\Gta iv\\sound\\audio2.mp3"});
Core.Zip.Build(string sourceFolder, string fileDest):void
Idêntico ao método acima, exceto que todo o conteúdo da pasta sourceFolder será adicionado ao zip.
Core.Zip.Unbuild
Core.Zip.Unbuild(string sourceFile, string destFolder, string[] onlyFiles):void
Abre o zip sourceFile e o descompacta na pasta destFolder, mas somente os arquivos definidos em onlyFiles.
Exemplo
O exemplo abaixo mostra descompactar somente 3 arquivos dentro de um zip e armazená-los em uma pasta local.
Core.Zip.Unbuild("c:\\gta iv\\meus_sons.zip","c:\\gta iv\sons",string[3]{"som1.mp3", "som2.mp3","som3.mp3"}
Core.Zip.Unbuild(string sourceFile, string destFolder):void
Idêntico ao método acima, exceto que todo o conteúdo do arqiuvo zip será descompactado.
//em desenvolvimento