Arquivos
Essas funções leem e escrevem arquivos dentro da pasta do resource que está rodando o script. O handle devolvido por fileOpen e fileCreate é um número no servidor e um elemento file no cliente (getElementType devolve "file").
Um arquivo aberto é carregado inteiro para a memória. Tudo que você escreve vai para essa cópia — o disco só é atualizado quando você chama fileFlush, quando fecha o arquivo com fileClose, ou quando o resource para (nesse momento todos os arquivos que ficaram abertos são gravados e fechados automaticamente).
Ciclo completo — criar, escrever, ler e fechar
local caminho = "logs/entradas.txt"
local arquivoif fileExists(caminho) then arquivo = fileOpen(caminho) -- abre para leitura e escritaelse arquivo = fileCreate(caminho) -- cria o arquivo (e a pasta logs/ junto)end
if arquivo then fileSetPos(arquivo, fileGetSize(arquivo)) -- posiciona no fim fileWrite(arquivo, "jogador entrou\n")
fileSetPos(arquivo, 0) -- volta para o começo outputDebugString(fileGetContents(arquivo, false)) -- false: pula a conferência de download do cliente
fileClose(arquivo) -- grava no disco e libera o handleendAlcançando outro resource
Seção intitulada “Alcançando outro resource”Um caminho que começa com : aponta para um arquivo dentro de outro resource:
local arquivo = fileOpen(":core/lib/versao.txt")No servidor, só funciona quando o seu próprio mtaxmanifest.lua declarou aquele caminho como uma entrada emprestada. Declarar é a permissão — o outro resource nunca é consultado:
-- mtaxmanifest.lua do resource que vai lerfiles = { ":core/lib/versao.txt", ":core/data/**/*.json",}As regras:
- Só leitura.
fileCreate,fileDelete,fileRenamee o destino defileCopynunca saem da sua própria pasta; um caminho com:ali simplesmente falha. - Um handle de
fileOpensobre um arquivo emprestado é sempre somente leitura, independente do que você passou emreadOnly.fileWritenele falha e nada é gravado de volta. - Só o que você declarou fica visível. Um caminho fora dos seus globs declarados falha exatamente como se o arquivo não existisse, e o
pathListDiresconde as entradas sobre as quais você não tem direito. - Um glob declarado no manifest continua valendo como glob aqui:
":core/data/**/*.json"abre qualquer um desses arquivos pelo nome. - Escrever o nome do seu próprio resource depois do
:é permitido e significa o mesmo que o caminho puro.
As funções que aceitam o formato são fileExists, fileOpen, fileCopy (só a origem), loadfile, pathListDir, pathIsFile e pathIsDirectory.
Estas 21 funções existem no servidor e no cliente. Você pode usá-las em scripts declarados em server_files, client_files ou shared_files.