Skip to content
Draft

fs

The fs module provides file system operations.

import fs
import { read_file, write_file, exists } from fs

Read entire file as string:

@content = @fs#read_file("example.txt")

Read file as byte array:

@bytes = @fs#read_file_bytes("image.png")

Read file as array of lines:

@lines = @fs#read_file_lines("data.csv")

Lazily iterate over lines:

@lines = @fs#read_file_lines_lazy("huge_file.txt")
for @line in @lines
process(@line)
fin for.

Write string to file (overwrites):

@fs#write_file("output.txt", "Hello, World!")

Write byte array to file:

@fs#write_file_bytes("data.bin", @bytes)

Append to file:

@fs#append_file("log.txt", "New entry\n")

Write array of lines:

@lines = ["line 1", "line 2", "line 3"]
@fs#write_lines("output.txt", @lines)

Check if path exists:

if @fs#exists("file.txt")
write("File exists")
fin if.

Check if path is a file:

if @fs#is_file("file.txt")
write("It's a file")
fin if.

Check if path is a directory:

if @fs#is_directory("src")
write("It's a directory")
fin if.

Get file size in bytes:

@bytes = @fs#size("file.txt")

Get last modified time:

@time = @fs#modified_time("file.txt")

Get creation time:

@time = @fs#created_time("file.txt")

Get file permissions:

@perms = @fs#permissions("file.txt")

Copy a file:

@fs#copy("source.txt", "destination.txt")

Move/rename a file:

@fs#move("old_name.txt", "new_name.txt")

Delete a file:

@fs#remove("file.txt")

Rename a file:

@fs#rename("old.txt", "new.txt")

Truncate file to size:

@fs#truncate("file.txt", 1024)

Create a directory:

@fs#create_dir("new_directory")

Create directory and all parents:

@fs#create_dir_all("path/to/nested/dir")

Remove empty directory:

@fs#remove_dir("empty_dir")

Remove directory and all contents:

@fs#remove_dir_all("dir_with_contents")

List directory contents:

@entries = @fs#list_dir("src")
for @entry in @entries
write(@entry)
fin for.

Recursively walk directory:

@files = @fs#walk_dir("src")
for @file in @files
if @fs#is_file(@file)
process(@file)
fin if.
fin for.

Get current working directory:

@cwd = @fs#current_dir()

Change working directory:

@fs#set_current_dir("/tmp")

Get temporary directory:

@tmp = @fs#temp_dir()

Join path components:

@path = @fs#join("src", "main.draft")
@// "src/main.draft"

Get parent directory:

@parent = @fs#parent("/home/user/file.txt")
@// "/home/user"

Get file name:

@name = @fs#file_name("/home/user/file.txt")
@// "file.txt"

Get file name without extension:

@stem = @fs#file_stem("/home/user/file.txt")
@// "file"

Get file extension:

@ext = @fs#extension("/home/user/file.txt")
@// ".txt"

Check if path is absolute:

@fs#is_absolute("/home/user") @// true
@fs#is_absolute("relative/path") @// false

Resolve to absolute path:

@abs = @fs#canonicalize("./relative/path")

Set file permissions:

@fs#set_permissions("file.txt", 0o644)

Check if file is readable:

@fs#is_readable("file.txt")

Check if file is writable:

@fs#is_writable("file.txt")

Check if file is executable:

@fs#is_executable("script.sh")

Watch for file changes:

@watcher = @fs#watch(".")
for @event in @watcher
write("File changed: " + @event#path)
fin for.

Extract a zip file:

@fs#extract_zip("archive.zip", "./output")

Create a zip archive:

@fs#create_zip(["file1.txt", "file2.txt"], "archive.zip")