Modules/FileSystem/translator/open

From Multi Theft Auto: Wiki
Revision as of 02:04, 24 January 2022 by Danilo (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

This function opens a link to a file instance on a given Eir FileSystem translator. Using a file link you can write and/or receive data from filesystems.

Syntax

file, string translator:open ( string filePath, string fileMode )

Arguments

  • filePath: the path to the file that should be opened
  • fileMode: an ANSI file mode descriptor (can be 'w', 'r' or 'a', with 'b' and/or '+' appended)

Returns

This function returns the FileSystem file class that can be used to retrieve or store data persistently. Returns false if the file failed to open and the reason of failure as string.

Failure reasons

  • unknown error
  • path out of scope
  • invalid parameters
  • resources exhausted
  • access denied
  • not found
  • already exists

Example

Click to collapse [-]
Server

This snippet lists information about the registered MTA server modules. This information can be retrieved through a command.

-- The table that will contain all module information.
local moduleInfo = {};

-- Attempt to get a handle to the FileSystem module namespace.
local fsys = createFilesystemInterface();

-- Could fail if the server restrictions are set tight.
if not ( fsys ) then
    outputDebugString( "could not get a handle to the FileSystem module namespace" );
    return false;
end

local function moduleFileIterator( filePath )
    -- Create an entry for this module.
    local moduleName = fsys.root:relPath( filePath );
    local moduleStats = fsys.root:stat( filePath );

    local entry = {
        name = moduleName,
        stats = moduleStats
    };

    -- Add the entry into the registry.
    table.insert( moduleInfo, entry );
end

-- Loop through all server modules.
fsys.root:chdir( "mods/deathmatch/modules/" );
fsys.root:scanDirEx( "", "*", nil, moduleFileIterator, false );

-- Function to get a module into by name.
local function getModuleByName( name )
    for m,n in ipairs( moduleInfo ) do
        if ( n.name == name ) then
            return n;
        end
    end

    return false;
end

-- Command to request server module information.
addCommandHandler( "modules",
    function(player, moduleName)
        -- Output module information to the player.
        local module = getModuleByName( moduleName );

        if not ( module ) then
            outputChatBox( "could not find module named " .. tostring( moduleName ), player );
            return false;
        end

        -- Output it.
        outputChatBox( "module-name: " .. module.name );
        outputChatBox( "module-size: " .. module.stats.size );
        
        -- todo: add more info about the module.
    end
);

FileSystem Translator Functions

FileSystem File Functions