FileSystem module provides a comprehensive abstraction for file system operations that work across platforms. All operations return Effect values for composable, functional file I/O with proper error handling.
Overview
The FileSystem interface offers both synchronous and asynchronous file operations through Effect, including:- File reading and writing (binary and text)
- Directory management
- File permissions and metadata
- Streaming file operations
- File watching
- Temporary file/directory creation
Basic Usage
File Operations
Reading Files
readFile
Reads a file as binary data (Uint8Array).
readFileString
Reads a file as a text string with optional encoding.
Writing Files
writeFile
Writes binary data to a file.
writeFileString
Writes a string to a file.
File Information
stat
Retrieves comprehensive file or directory information.
File.Info structure includes:
type: File type (File, Directory, SymbolicLink, etc.)size: File size in bytesmtime,atime,birthtime: Timestampsmode: Permissionsuid,gid: User/group IDs
exists
Checks if a path exists.
Directory Operations
makeDirectory
Creates a directory with optional recursive creation.
readDirectory
Lists directory contents with optional recursive listing.
remove
Removes a file or directory.
Streaming Operations
stream
Creates a readable Stream for file contents.
sink
Creates a writable Sink for file output.
Temporary Files
makeTempDirectory
Creates a temporary directory.
makeTempDirectoryScoped
Creates a temporary directory that’s automatically deleted when the scope closes.
File Operations
copy
Copies a file or directory (equivalent to cp -r).
rename
Renames or moves a file or directory.
symlink
Creates a symbolic link.
File Watching
watch
Watches a directory or file for changes.
Create: New file/directory createdUpdate: File/directory modifiedRemove: File/directory deleted
Size Utilities
The module provides convenient helpers for working with file sizes:Size Constructors
Size(bytes): Creates a Size from number or bigintKiB(n): Kibibytes (1024 bytes)MiB(n): Mebibytes (1024² bytes)GiB(n): Gibibytes (1024³ bytes)TiB(n): Tebibytes (1024⁴ bytes)PiB(n): Pebibytes (1024⁵ bytes)
Low-Level File Handles
For fine-grained control, you can work with file handles directly:open
Opens a file and returns a handle that’s automatically closed when the scope exits.
Open Flags
File open flags control how files are opened:"r": Read-only. File must exist."r+": Read/write. File must exist."w": Write-only. Truncates or creates file."wx": Like ‘w’ but fails if file exists."w+": Read/write. Truncates or creates file."wx+": Like ‘w+’ but fails if file exists."a": Write-only append. Creates if needed."ax": Like ‘a’ but fails if file exists."a+": Read/write append. Creates if needed."ax+": Like ‘a+’ but fails if file exists.
