English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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:
Modo | Descrição |
---|---|
r | Abre arquivo existente em modo de leitura exclusiva, o arquivo deve existir. |
w | Abre 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. |
a | Abre 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 |
b | Modo 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 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:
Modo | Descriçã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") |
number | Retorna 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
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