Modules/FileSystem/translator/scanDir: Difference between revisions
No edit summary |
(fix code example) |
||
Line 20: | Line 20: | ||
This snippet outputs the count of directories and files in a specified directory relative to the resource instance root. | This snippet outputs the count of directories and files in a specified directory relative to the resource instance root. | ||
<syntaxhighlight lang="lua"> | <syntaxhighlight lang="lua"> | ||
-- Attempt to get a handle to the FileSystem module namespace. | |||
local fsys = createFilesystemInterface(); | |||
-- Get a handle to the resource instance directory. | -- Get a handle to the resource instance directory. | ||
local resRoot = | local resRoot = fsys.createTranslator( "mods/deathmatch/resources/" .. getResourceName(resource) .. "/" ); | ||
-- Function that returns whether the given path is a directory path. | -- Function that returns whether the given path is a directory path. |
Latest revision as of 21:28, 14 November 2023
This function loops through all translator filesystem entries that are captured by the wildcard and the directory specifier. The wildcard is glob-style and supports * and ? modifiers. The scan can be made recursive to enter every directory it finds, so that files and folders of a whole directory tree are captured. This function is used to process filesystem objects inside of directories without having to add the filenames into a configuration file. This greatly increases flexibility when processing files. Other than scanDirEx, this function returns a table of directories and files.
Syntax
table translator:scanDir ( string dirPath, string wildcard, bool recursive )
Arguments
- dirPath: a path to the directory the scan shall take place or start in
- wildcard: glob-style wild-card for filename matching; every filename that matches the wild-card is returned
- recursive: a boolean that specifies whether the whole directory tree at dirPath should be included into the scan
Returns
This function returns a table consisting of all directories and all matching file entries which were found during the scan. It returns false if dirPath is an invalid path specifier for the translator.
Example
This snippet outputs the count of directories and files in a specified directory relative to the resource instance root.
-- Attempt to get a handle to the FileSystem module namespace. local fsys = createFilesystemInterface(); -- Get a handle to the resource instance directory. local resRoot = fsys.createTranslator( "mods/deathmatch/resources/" .. getResourceName(resource) .. "/" ); -- Function that returns whether the given path is a directory path. local function isDirectoryPath( path ) local lastChar = string.sub( path, #path, #path ); return ( lastChar == "/" ) or ( lastChar == "\\" ); end local function getFilesystemObjectCounts( path ) local fileCount = 0; local dirCount = 0; -- Get a list of all fs objects. local fsObjects = resRoot:scanDir( path, -- scan anywhere the script wants us to "*", -- include all files false -- scan the specified directory only ); -- Loop through all object names to set up the counts. -- An object can either be a directory or a file. for m,n in ipairs(fsObjects) do if ( isDirectoryPath( n ) ) then dirCount = dirCount + 1; else fileCount = fileCount + 1; end end -- Return the counts. return fileCount, dirCount; end -- Output the filesystem object counts for the resource instance root. local fileCount, dirCount = getFilesystemObjectCounts( "/" ); outputChatBox( "found " .. fileCount .. " files and " .. dirCount .. " directories in the resource folder root." );