MTA:Eir/FileSystem/translator/scanDirEx

From Multi Theft Auto: Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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. This function is more flexible than scanDir as it triggers callbacks directly when either files or directories are found, making a distinction between files and directories very easy.

Syntax

bool translator:scanDirEx ( string dirPath, string wildcard, function dirCallback, function fileCallback, 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
  • dirCallback: the function callback that should trigger for every directory found (can be nil); the absolute path of the directory is passed to it
  • fileCallback: the directory callback that should trigger for every file found (can be nil); the absolute path of the file is passed to it
  • recursive: a boolean that specifies whether the whole directory tree at dirPath should be included into the scan

Returns

This function performs a scan of all filesystem objects captured inside of the dirPath folder using the wild-card glob-style pattern. It returns false if dirPath is an invalid path specifier for the translator.

Example

Click to collapse [-]
Client

This snippet outputs the count of directories and files in a specified directory relative to the resource instance root. This is an alternative to the scanDir way.

-- Get a handle to the resource instance directory.
local resRoot = fileCreateTranslator( "/" );

local function getFilesystemObjectCounts( path )
    local fileCount = 0;
    local dirCount = 0;

    -- Create iterator closures that are triggered for each file and directory
    local function fileIterator( filePath )
        -- filePath is always an absolute path.
        fileCount = fileCount + 1;
    end

    local function dirIterator( dirPath )
        -- filePath is always an absolute path.
        dirCount = dirCount + 1;
    end

    -- Get a list of all fs objects.
    local fsObjects =
        resRoot:scanDirEx(
            path, -- scan anywhere the script wants us to
            "*", -- include all files
            dirIterator, -- pass the callbacks to the routine
            fileIterator,
            false -- scan the specified directory only
        );

    -- We do not need to loop anymore.

    -- 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." );

FileSystem Translator Functions