Pular para o conteúdo

Arquivos

Compartilhada

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 arquivo
if fileExists(caminho) then
arquivo = fileOpen(caminho) -- abre para leitura e escrita
else
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 handle
end

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 ler
files = {
":core/lib/versao.txt",
":core/data/**/*.json",
}

As regras:

  • Só leitura. fileCreate, fileDelete, fileRename e o destino de fileCopy nunca saem da sua própria pasta; um caminho com : ali simplesmente falha.
  • Um handle de fileOpen sobre um arquivo emprestado é sempre somente leitura, independente do que você passou em readOnly. fileWrite nele 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 pathListDir esconde 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.