# fs (FIle System) Module Async versions can acces file at the same time which can lead to conflicts in operations, erros can be handled in callback. Sync versions cannot interfere with each other, errors cause exceptions, handle in try-catch. ## Files ### Creating & Deleting Files ```js fs.writeFile(file, data, encoding="utf8", mode=0o666, (err) => {}); // create a file (async) fs.writeFileSync(file, data, encoding="utf8", mode=0o666); // create a file (sync) // remove file fs.unlink(path, callback); // delete a file (async) fs.unlinkSync(path); // delete a file (sync) // remove file or directory fs.rm(path, force=false, recursive=false, (err) => {}); fs.rmSync(path, force=false, recursive=false); // rename a file, if oldPath is a directory an error will be rised fs.rename(oldPath, newPath, (err) => {}); fs.renameSync(oldPath, newPath); ``` ### Writing & Reading a File ```js // append contents to a file fs.appendFile(file, data, encoding="utf8", mode=0o666, (err) => {}); fs.appendFileSync(file, data, encoding="utf8", mode=0o666); // write contents into a file fs.write(fd, string, position, encoding="utf8", (err) => {}); fs.writeSync(fd, string, position, encoding="utf8"); // returns num of bytes written // read file contents fs.readFile(path, (err, data) => {}); fs.readFileSync(path); // returns contents of the file ``` ### Managing Links ```js // make a new name for a file fs.link(existingPath, newPath, (err) => {}); fs.linkSync(existingPath, newPath); // make a new name for a file (symlink) fs.symlink(target, path, (err) => {}); fs.symlink(target, path); ``` ### Managing Permissions ## Directories & `fs.Dir` ### Creating & Deleting Directories ```js // create a directory fs.mkdir(path, mode=0o777, (err) => {}); fs.mkdirSync(path, mode=0o777); // remove a directory fs.rmdir(path, recursive=false, (err) => {}); fs.rmdirSync(path, recursive=false; ``` ### Reading Directory Contents ```js // read directrory contents fs.readdir(path, (err, files) => {}); // files is string[] fs.readdir(path, { withFileTypes: true }, (err, files) => {}); // files is Dirent[] fs.readdirSync(path); // returns string[] of files/directories fs.readdirSync(path, { withFileTypes: true }); // returns Dirent[] of files/directories ``` ### `fs.Dir` ```js // construct an fs.Dir object from an existing path fs.opendir(path, (err, dir) => {}); fs.opendirSync(path); // return a fs.Dir object ``` ## fs.Stats ### Obtaining ```js fs.stat(path, {bigint: true}, (err, stats) => {}); fs.statSync(path, {bigint: true}); // returns fs.Stats fs.lstat(path, {bigint: true}, (err, stats) => {}); fs.lstatSync(path, {bigint: true}); // returns fs.Stats fs.fstat(path, {bigint: true}, (err, stats) => {}); fs.fstatSync(path, {bigint: true}); // returns fs.Stats ```