Awesome
lovefs
Load and save files outside love.filesystem
.
with ffi
The ffi code was mostly adapted (with my sincerest gratitude) from
-- dir is [string], if no dir is given, start on UserDirectory
fs = lovefs(dir)
To get started, have a look at the demo.
lovefs.lua
members
-- Current Directory [string] (don't change it, use fs:cd(dir))
fs.current
-- drives, directories and files [tables] of current dir
fs.drives
fs.dirs
fs.files
fs.all
-- [string] used by fs:loadImage, fs:loadSource, fs:loadFont and fs:saveImage if no source is given
fs.selectedFile
-- user directory [string]
fs.home
-- [table] with extensions, like {'jpg', 'png'}. Used by fs:ls to filter files. Don't forget to NIL!
fs.filter
-- Show or hide hidden files and directories. Default: FALSE
fs.showHidden
methods
-- update drives list
fs:updDrives()
These functions accept absolute and relative (to current) paths:
-- return dir (absolute path) [string], tDirs, tFiles, tAll [tables]. Return FALSE if dir don't exist. Alias: fs:dir(dir)
fs:ls(dir)
-- return TRUE if exists [booleans]
fs:exists(path)
-- return TRUE if is directory. [booleans]
fs:isDirectory(path)
-- return TRUE if is file. [booleans]
fs:isFile(path)
-- Change directory. Populate fs.dirs and fs.files and fs.all with the new directory contents. Return TRUE if successful
fs:cd(dir)
-- move to parent directory (using cd())
fs:up()
-- filter can be [nil, table or string]. sets fs.filter and calls fs:cd().
-- String can be 'File type | *.ext1 *.ext2'
fs:setFilter(filter)
-- switch fs.showHidden
fs:switchHidden()
-- return absolute paths
fs:absPath(path)
-- return image. Use fs.selectedFile if no source is given
fs:loadImage(source)
--return sound. Use fs.selectedFile if no source is given
fs:loadSource(source)
--return font. Use fs.selectedFile if no source is given
fs:loadFont(size, source)
-- Need Canvas support. Return FALSE on failure. Use fs.selectedFile if no source is given
fs:saveImage(img, dest)
-- copy file, this function only accept absolute paths
fs:copy(source, dest)
dialogs
These are ready-made dialogs for various UI libraries.
Example filter:
{'All | *.*', 'Image | *.jpg *.png *.bmp', 'Sound | *.mp3 *.wav'}
When the user presses OK, the selected file is available in fs.selectedFile
luigiDialog.lua
Use this to make a file-browser dialog with LUIGI. Also see LuigiDemo.
-- show a load dialog, without a layout
fs:loadDialog(gui, label, filters)
-- use with a layout
fs:loadDialog(gui.Layout, label, filters)
-- show a save dialog, without a layout
fs:saveDialog(gui, label)
-- use with a layout
fs:saveDialog(gui.Layout, label)
loveframesDialog.lua
Use this to make a file-browser dialog with loveframes. Also see LoveFramesDemo.
-- show a load dialog
fs:loadDialog(lf, label, filters)
-- show a save dialog
fs:saveDialog(lf, label)
gspotDialog.lua
Use this to make a file-browser dialog with gspot. Also see GspotDemo.
-- show a load dialog
fs:loadDialog(gspot, label, filters)
-- show a save dialog
fs:saveDialog(gspot, label)
slab
Slab has some nice UI elements built-in, that use this library, as well.
without ffi
You can also use lovefs-noffi, if you need support for pre-ffi love2d (before love 11), or you just want to not use FFI. It has it's own README. It uses popen
to call commands from the OS, so it's a bit slower, but maybe more cross-platform, in some situations.