90 lines
2.6 KiB
Lua
90 lines
2.6 KiB
Lua
local fs=love.filesystem
|
|
local FILE={}
|
|
function FILE.load(name,args)
|
|
if not args then args=''end
|
|
if fs.getInfo(name)then
|
|
local F=fs.newFile(name)
|
|
assert(F:open'r','open error')
|
|
local s=F:read()F:close()
|
|
if args:sArg'-luaon'or args==''and s:sub(1,6)=='return{'then
|
|
local func=loadstring(s)
|
|
if func then
|
|
setfenv(func,{})
|
|
local res=func()
|
|
return assert(res,'decode error')
|
|
else
|
|
error('decode error')
|
|
end
|
|
elseif args:sArg'-json'or args==''and s:sub(1,1)=='['and s:sub(-1)==']'or s:sub(1,1)=='{'and s:sub(-1)=='}'then
|
|
local res=JSON.decode(s)
|
|
if res then
|
|
return res
|
|
end
|
|
error('decode error')
|
|
elseif args:sArg'-string'or args==''then
|
|
return s
|
|
else
|
|
error('unknown mode')
|
|
end
|
|
else
|
|
error('no file')
|
|
end
|
|
end
|
|
function FILE.save(data,name,args)
|
|
if not args then args=''end
|
|
if args:sArg'-d'and fs.getInfo(name)then
|
|
error('duplicate')
|
|
end
|
|
|
|
if type(data)=='table'then
|
|
if args:sArg'-luaon'then
|
|
data=TABLE.dump(data)
|
|
if not data then
|
|
error('encode error')
|
|
end
|
|
else
|
|
data=JSON.encode(data)
|
|
if not data then
|
|
error('encode error')
|
|
end
|
|
end
|
|
else
|
|
data=tostring(data)
|
|
end
|
|
|
|
local F=fs.newFile(name)
|
|
assert(F:open('w'),'open error')
|
|
F:write(data)F:flush()F:close()
|
|
end
|
|
function FILE.clear(path)
|
|
if fs.getRealDirectory(path)==SAVEDIR and fs.getInfo(path).type=='directory'then
|
|
for _,name in next,fs.getDirectoryItems(path)do
|
|
name=path..'/'..name
|
|
if fs.getRealDirectory(name)==SAVEDIR then
|
|
local t=fs.getInfo(name).type
|
|
if t=='file'then
|
|
fs.remove(name)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
function FILE.clear_s(path)
|
|
if path==''or(fs.getRealDirectory(path)==SAVEDIR and fs.getInfo(path).type=='directory')then
|
|
for _,name in next,fs.getDirectoryItems(path)do
|
|
name=path..'/'..name
|
|
if fs.getRealDirectory(name)==SAVEDIR then
|
|
local t=fs.getInfo(name).type
|
|
if t=='file'then
|
|
fs.remove(name)
|
|
elseif t=='directory'then
|
|
FILE.clear_s(name)
|
|
fs.remove(name)
|
|
end
|
|
end
|
|
end
|
|
fs.remove(path)
|
|
end
|
|
end
|
|
return FILE
|