The Filesystem API provides functions for manipulating files and the filesystem.

The path for the argument of functions blocks `\,.\,.\,' to be passed, preventing users from access outside of the computer and eliminating the potential of harming the real computer of the innocent players.

\section{Functions}

\begin{tabularx}{\textwidth}{l l X}
	\textbf{\large Function} & \textbf{\large Return} & \textbf{\large Description}
	\\ \\
	\endhead
	fs.list(\textbf{path}: string) & table & Returns list of files in \textbf{path}, in lua table.
	\\ \\
	fs.exists(\textbf{path}: string) & bool & Checks if \textbf{path} exists on the filesystem. NOTE: avoid using it as much as you can; it's somewhat erratic.
	\\ \\
	fs.isDir(\textbf{path}: string) & bool & Checks if \textbf{path} is a directory.
	\\ \\
	fs.isFile(\textbf{path}: string) & bool & Checks if \textbf{path} is a file.
	\\ \\
	fs.isReadOnly(\textbf{path}: string) & bool & Checks if \textbf{path} is read only.
	\\ \\
	fs.getSize(\textbf{path}: string) & int & Returns a size of the file/directory, in bytes.
	\\ \\
	fs.mkdir(\textbf{path}: string) & bool & Create a directory to \textbf{path}. Returns \textbf{true} upon success.
	\\ \\
	fs.mv(\textbf{from}: string, \textbf{dest}: string) & bool & Moves the directory to the destination. Subdirectories / files will also be moved. Returns \textbf{true} upon success.
	\\ \\
	fs.cp(\textbf{from}: string, \textbf{dest}: string) & bool & Copies the directory to the destination. Subdirectories / files will also be copied. Returns \textbf{true} upon success.
	\\ \\
	fs.rm(\textbf{path}: string) & bool & Deletes the \textbf{path}. If \textbf{path} is a directory, all its members will also be deleted. Returns \textbf{true} upon success.
	\\ \\
	fs.concat(\textbf{p1}: string, \textbf{p2}: string) & string & Concatenates two paths and return new path as string.
	\\ \\
	fs.open(\textbf{path}: string, \textbf{mode}: string) & file & Opens file and returns its handle. See section \emph{File Handler} for details.
	\\ \\
	fs.parent(\textbf{path}: string) & string & Returs parent directory to the \textbf{path}.
	\\ \\
	fs.dofile(\textbf{path}: string) & nil & Loads the script on \textbf{path} and executes it. NOTE: do not use this directly, instead use \textbf{shell.run(path, tArgs)}; fs.dofile does not provide any error handling.
	\\ \\
	fs.fetchText(\textbf{path}: string) & string & Opens the file on \textbf{path} and returns its contents as a plain text.
\end{tabularx}

\section{File Handler}

When opening a file, there are six modes available---r, w, a, rb, wb, ab; each represents \textbf{r}ead, \textbf{w}rite, \textbf{a}ppend and \textbf{b}yte.

\begin{tabularx}{\textwidth}{l X}
	\textbf{\large Function} & \textbf{\large Description}
	\\ \\
	\endhead
	file.close() & Closes the file. Any data wrote will be actually wrote to disk when this function is called.
	\\ \\
	file.flush() & (in write/append mode) Flushes the data to the file, keeps the handle available afterwards
	\\ \\
	\multicolumn{2}{c}{\textbf{Read mode}}
	\\ \\ 
	file.readLine() & Reads text from the file line by line. Returns string of line, or \emph{nil} if there is no next line.
	\\ \\
	file.readAll() & Reads and returns whole text in the file as string.
	\\ \\
	\multicolumn{2}{c}{\textbf{Read binary mode}}
	\\ \\
	file.read() & Reads single byte in the file as int, or \emph{-1} if end-of-file is reached.
	\\ \\
	file.readAll() & Reads and returns whole byte in the file as string.
	\\ \\
	\multicolumn{2}{c}{\textbf{Write/append mode}}
	\\ \\
	file.write(string) & Writes \textbf{string} to the file.
	\\ \\
	file.writeLine(string) & Writes \textbf{string} to the file and append line feed.
	\\ \\
	\multicolumn{2}{c}{\textbf{Write/append binary mode}}
	\\ \\
	file.write(int) & Writes \textbf{int} to the file.
	\\ \\
	file.writeBytes(string) & Writes \textbf{string} to the file and append line feed.
\end{tabularx}