English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Lua arquivo I/O

Lua I/O biblioteca O é usada para ler e processar arquivos. Divide-se em modo simples (como o C) e modo completo.

  • O modo simples (simple model) possui um arquivo de entrada atual e um arquivo de saída atual, e fornece operações relacionadas a esses arquivos.

  • O modo completo (complete model) usa o descritor de arquivo externo para implementar. Ele define todas as operações de arquivo como métodos do descritor de arquivo de forma objetiva

O modo simples é adequado para algumas operações de arquivo simples. No entanto, no modo de operação de arquivo avançado, o modo simples não é suficiente. Por exemplo, ao ler vários arquivos ao mesmo tempo, o modo completo é mais adequado.

A operação de abertura de arquivo é como follows:

file = io.open (filename[, mode])

Os valores de mode são:

ModoDescrição
rAbre arquivo existente em modo de leitura exclusiva, o arquivo deve existir.
wAbre arquivo de escrita exclusiva, se o arquivo existir, o comprimento do arquivo será zerado, ou seja, o conteúdo do arquivo será perdido. Se o arquivo não existir, será criado o arquivo.
aAbre arquivo de escrita em modo adicional. Se o arquivo não existir, será criado o arquivo. Se o arquivo existir, os dados escritos serão adicionados ao final do arquivo, ou seja, o conteúdo original do arquivo será mantido. (EOF mantido)
r+Abre arquivo existente em modo de leitura e escrita, o arquivo deve existir.
w+Abre arquivo de leitura e escrita, se o arquivo existir, o comprimento do arquivo será zerado, ou seja, o conteúdo do arquivo será perdido. Se o arquivo não existir, será criado o arquivo.
a+Como o a, mas este arquivo pode ser lido e escrito
bModo binário, se o arquivo for um arquivo binário, pode ser adicionado b
+O número significa que o arquivo pode ser lido e escrito

Modo simples

Modo simples usa padrão padrão I/ou usar um arquivo de entrada atual e um arquivo de saída atual.

A seguir está o código do arquivo file.lua, o arquivo operado é test.lua (se não existir, você precisa criar o arquivo), o código é o seguinte:

-- Abrir o arquivo em modo de leitura
file = io.open("test.lua", "r")
-- Definir o arquivo de entrada padrão como 'test.lua'
io.input(file)
-- Imprimir a primeira linha do arquivo
print(io.read())
-- Fechar o arquivo aberto
io.close(file)
-- Abrir um arquivo de escrita exclusivo em modo de附加值
file = io.open("test.lua", "a")
-- Definir o arquivo de saída padrão como 'test.lua'
io.output(file)
-- Adicionar comentário Lua na última linha do arquivo
io.write("--  comentário no final do arquivo test.lua")
-- Fechar o arquivo aberto
io.close(file)

Ao executar o código acima, você verá que foi impressa a primeira linha do arquivo test.lua e foi adicionado um comentário lua na última linha do arquivo. Por exemplo, a saída daqui é:

-- arquivo test.lua

Nos exemplos acima, usamos o método io."x". No io.read(), não usamos parâmetros, mas podem ser um dos seguintes:

ModoDescrição
"*n"Ler um número e retorná-lo. Exemplo: file.read("*n")
"*a"Ler todo o arquivo a partir da posição atual. Exemplo: file.read("*a")
"*l" (padrão)Ler a próxima linha, retornar nil no EOF (fim do arquivo). Exemplo: file.read("*l")
numberRetorna uma string com um número específico de caracteres, ou nil no EOF. Exemplo: file.read("5)

Outros métodos io incluem:

  • io.tmpfile():Retorna um descritor de arquivo temporário, o arquivo é aberto em modo de atualização, e é automaticamente excluído no final do programa

  • io.type(file): Verificar se 'obj' é um descritor de arquivo disponível

  • io.flush(): Escrever todos os dados no buffer para o arquivo

  • io.lines(opcional nome do arquivo): Retorna uma função iterativa, que retorna uma linha do arquivo a cada chamada. Quando chega ao final do arquivo, retorna nil, mas não fecha o arquivo

Modo completo

Geralmente, precisamos lidar com vários arquivos ao mesmo tempo. Nós precisamos usar file:function_name em vez de io:function_name. O exemplo a seguir demonstra como lidar com o mesmo arquivo ao mesmo tempo:

-- Abrir o arquivo em modo de leitura
file = io.open("test.lua", "r")
-- Imprimir a primeira linha do arquivo
print(file:read())
-- Fechar o arquivo aberto
file:close()
-- Abrir um arquivo de escrita exclusivo em modo de附加值
file = io.open("test.lua", "a")
-- Adicionar comentário Lua na última linha do arquivo
file:write("--test")
-- Fechar o arquivo aberto
file:close()

Ao executar o código acima, você verá que foi impressa a primeira linha do arquivo test.ua e foi adicionado um comentário lua na última linha do arquivo. Por exemplo, a saída daqui é:

-- arquivo test.lua

Os parâmetros de 'read' são os mesmos que no modo simples.

其他方法:

  • file:seek(opcional whence, opcional offset): Definir e obter a posição atual do arquivo, retornando a posição final do arquivo (em bytes) com sucesso, ou retornando nil com uma mensagem de erro. O valor do parâmetro whence pode ser:

    Sem parâmetro, file:seek() retorna a posição atual, file:seek("set") localiza para o início do arquivo, file:seek("end") localiza para o final do arquivo e retorna o tamanho do arquivo

    • "set": começa do início do arquivo

    • "cur": começa da posição atual [padrão]

    • "end": começa do final do arquivo

    • offset: padrão é 0

  • file:flush(): Escrever todos os dados no buffer para o arquivo

  • io.lines(opcional nome do arquivo): Abrir o arquivo especificado filename em modo de leitura e retornar uma função iterativa, que, ao ser chamada, obterá uma linha do arquivo. Quando atingir o final do arquivo, retornará nil e fechará automaticamente o arquivo.
    Quando não for fornecido parâmetro, io.lines() == io.input():lines(); lê o conteúdo do dispositivo de entrada padrão, mas não fecha o arquivo no final, por exemplo:

    for line in io.lines("main.lua") do
      print(line)
      fim

O exemplo a seguir usa o método seek, localizando o arquivo no 25 usando o método read *parâmetro a, ou a partir da posição atual (o último) 25 em uma posição) para ler todo o arquivo.

-- Abrir o arquivo em modo de leitura
file = io.open("test.lua", "r")
file:seek("end",-25)
print(file:read("*a"))
-- Fechar o arquivo aberto
file:close()

O resultado que eu estou obtendo é:

fim do arquivo st.lua--test