LFS - Lua File System
Introdução
O módulo LFS é um módulo externo que complementa as funções relacionadas a manipulação de arquivos já oferecidas pelos módulos padrão da distribuição Lua.
O LFS permite acesso a estrutura de diretórios e aos atributos de arquivo.
API
O LFS oferece a seguinte API:
Função |
Valor de retorno |
Descrição |
lfs.attributes (filepath [, aname]) |
table |
Retorna tabela com atributos de arquivos |
lfs.currentdir () |
string ou nil |
Retorna o diretório de trabalho corrente |
lfs.chdir (path) |
true ou (nil,err) |
Muda o diretório corrente |
lfs.dir (path) |
(iter, dir_obj) |
Lista o conteúdo de um dado diretório |
lfs.mkdir (dirname) |
true ou (nil,err) |
Cria um novo diretório |
lfs.rmdir (dirname) |
true ou (nil,err) |
Remove um determinado diretório |
lfs.setmode (file, mode) |
prev_mode_string |
Define se arquivo é binário ou texto. Parâmetro mode pode ser ‘binary’ ou ‘text’. |
lfs.touch (filepath [, atime [, mtime]]) |
true ou (nil,err) |
Atualiza data de acesso e modificação de um arquivo. |
lfs.lock_dir(path) |
lock_obj ou (nil,err) |
Cria arquivo de tranca para travar acesso ao diretório |
lfs.lock (filehandle, mode[, start[, length]]) |
true ou (nil,err) |
Trava acesso a um arquivo. Parâmetro mode pode ser ‘r’ (read/shared lock) ou ‘w’ (write/exclusive lock). |
lfs.unlock (filehandle[, start[, length]]) |
true ou (nil,err) |
Destrava acesso a um arquivo. |
Para maiores detalhes consulte a referência da documentação original (em Inglês).
Exemplos de uso
Criação e remoção de diretório
function check(context, success,msg)
if not success then
print("Error in " .. context .. ":" .. msg)
end
end
-- Cria novo diretório
lfs.mkdir("c:\\tmp\\novo")
-- Remove diretório criado
err,msg = lfs.rmdir("c:\\tmp\\novo")
check("rmdir",err,msg)
Percurso e identificação de atributos de arquivo
-- Função recursiva que imprime diretórios,arquivos e atributos
function attrdir(path)
for file in lfs.dir(path) do
if file ~= "." and file ~= ".." then
local f = path..'/'..file
print (f)
local attr = lfs.attributes (f)
assert (type(attr) == "table")
if attr.mode == "directory" then
attrdir (f)
else
for name, value in pairs(attr) do
if name == "change" then
print ("\t" .. name .. ": " .. os.date("%d-%m-%Y %H:%M:%S",value))
elseif name == "modification" then
print ("\t" .. name .. ": " .. os.date("%d-%m-%Y %H:%M:%S",value))
elseif name == "access" then
print ("\t" .. name .. ": " .. os.date("%d-%m-%Y %H:%M:%S",value))
else
print ("\t" .. name .. ": " .. value)
end
end
end
end
end
end
-- Invocação da função para o diretório c:\tmp
attrdir("c:/tmp")
Exemplo de saída para um dado arquivo:
c:/tmp/simplc/simplc.py
size: 11514
change: 10-05-2012 14:13:12
access: 10-05-2012 14:13:12
modification: 10-05-2012 13:56:55
mode: file -- valores possíveis: file, directory, link, socket, named pipe, char device, block device, other
dev: 2 -- número do drive
rdev: 2 -- sempre igual a dev no Windows
nlink: 1 -- número de hardlinks para o arquivo
uid: 0 -- sempre 0 no Windows
gid: 0 -- sempre 0 no Windows
ino: 0 -- sem significado no Windows
Referências
Existem outros módulos em Lua que permitem manipulação do sistema de arquivos. A biblioteca Penlight, ainda que não inclusa por default no conjunto de módulos padrão, oferece diversas funções úteis relacionadas a manipulação de diretórios e arquivos.