UNPKG

learnyounode

Version:

Learn You The Node.js For Much Win! An intro to Node.js via a set of self-guided workshops.

605 lines (586 loc) 415 kB
<!DOCTYPE html><html lang="en"><head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <title>File System | Node.js v12.10.0 Documentation</title> <link rel="stylesheet" href="data:text/css;base64,LyogbGF0aW4tZXh0ICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnTGF0byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnTGF0byBJdGFsaWMnKSwgbG9jYWwoJ0xhdG8tSXRhbGljJyksIHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvbGF0by92MTYvUzZ1OHc0Qk1VVFBIanhzQVVpLXFOaVhnN2VVMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzAyNTksIFUrMUUwMC0xRUZGLCBVKzIwMjAsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyMTEzLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KLyogbGF0aW4gKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdMYXRvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdMYXRvIEl0YWxpYycpLCBsb2NhbCgnTGF0by1JdGFsaWMnKSwgdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9sYXRvL3YxNi9TNnU4dzRCTVVUUEhqeHNBWEMtcU5pWGc3US53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQkItMDJCQywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIxMjIsIFUrMjE5MSwgVSsyMTkzLCBVKzIyMTIsIFUrMjIxNSwgVStGRUZGLCBVK0ZGRkQ7Cn0KLyogbGF0aW4tZXh0ICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnTGF0byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnTGF0byBSZWd1bGFyJyksIGxvY2FsKCdMYXRvLVJlZ3VsYXInKSwgdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9sYXRvL3YxNi9TNnV5dzRCTVVUUEhqeEF3WGlXdEZDZlE3QS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzAyNTksIFUrMUUwMC0xRUZGLCBVKzIwMjAsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyMTEzLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KLyogbGF0aW4gKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdMYXRvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdMYXRvIFJlZ3VsYXInKSwgbG9jYWwoJ0xhdG8tUmVndWxhcicpLCB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2xhdG8vdjE2L1M2dXl3NEJNVVRQSGp4NHdYaVd0RkNjLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJCQi0wMkJDLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjEyMiwgVSsyMTkxLCBVKzIxOTMsIFUrMjIxMiwgVSsyMjE1LCBVK0ZFRkYsIFUrRkZGRDsKfQovKiBsYXRpbi1leHQgKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdMYXRvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdMYXRvIEJvbGQnKSwgbG9jYWwoJ0xhdG8tQm9sZCcpLCB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2xhdG8vdjE2L1M2dTl3NEJNVVRQSGg2VVZTd2FQR1EzcTVkME43dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzAyNTksIFUrMUUwMC0xRUZGLCBVKzIwMjAsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyMTEzLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KLyogbGF0aW4gKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdMYXRvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdMYXRvIEJvbGQnKSwgbG9jYWwoJ0xhdG8tQm9sZCcpLCB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2xhdG8vdjE2L1M2dTl3NEJNVVRQSGg2VVZTd2lQR1EzcTVkMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQkItMDJCQywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIxMjIsIFUrMjE5MSwgVSsyMTkzLCBVKzIyMTIsIFUrMjIxNSwgVStGRUZGLCBVK0ZGRkQ7Cn0K"> <link rel="stylesheet" href="data:text/css;base64,LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gTGF5b3V0IGFuZCBUeXBvZ3JhcGh5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpodG1sIHsKICBmb250LXNpemU6IDFyZW07CiAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOwogIC13ZWJraXQtZm9udC12YXJpYW50LWxpZ2F0dXJlczogbm9uZTsKICAgICAgICAgIGZvbnQtdmFyaWFudC1saWdhdHVyZXM6IG5vbmU7Cn0KCiogewogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7Cn0KCmJvZHkgewogIGZvbnQtZmFtaWx5OiAiTGF0byIsICJMdWNpZGEgR3JhbmRlIiwgIkx1Y2lkYSBTYW5zIFVuaWNvZGUiLCAiTHVjaWRhIFNhbnMiLCBWZXJkYW5hLCBUYWhvbWEsIHNhbnMtc2VyaWY7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDA7CiAgY29sb3I6ICMzMzM7CiAgYmFja2dyb3VuZDogI2ZmZjsKfQoKaDEgeyBmb250LXNpemU6IDIuNXJlbSB9CmgyIHsgZm9udC1zaXplOiAycmVtIH0KaDMgeyBmb250LXNpemU6IDEuNzVyZW0gfQpoNCB7IGZvbnQtc2l6ZTogMS41cmVtIH0KaDUgeyBmb250LXNpemU6IDEuMjVyZW0gfQpoNiB7IGZvbnQtc2l6ZTogMXJlbSB9CgpoMSwgaDIsIGgzLCBoNCwgaDUsIGg2IHsKICBtYXJnaW46IDEuNXJlbSAwIDFyZW07CiAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKICBmb250LXdlaWdodDogNzAwOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKcHJlLCB0dCwgY29kZSwgLnByZSwgc3Bhbi50eXBlLCBhLnR5cGUgewogIGZvbnQtZmFtaWx5OiBTRk1vbm8tUmVndWxhciwgTWVubG8sIENvbnNvbGFzLCAiTGliZXJhdGlvbiBNb25vIiwgIkNvdXJpZXIgTmV3IiwgbW9ub3NwYWNlOwogIGZvbnQtc2l6ZTogLjllbTsKfQoKI2NvbnRlbnQgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKYSwgYTpsaW5rLCBhOmFjdGl2ZSB7CiAgY29sb3I6ICM0Mzg1M2Q7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogIGJvcmRlci1yYWRpdXM6IDJweDsKICBwYWRkaW5nOiAxcHggM3B4Owp9CgphOmhvdmVyLCBhOmZvY3VzIHsKICBjb2xvcjogI2ZmZjsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDM4NTNkOwogIG91dGxpbmU6IG5vbmU7Cn0KCnN0cm9uZyB7CiAgZm9udC13ZWlnaHQ6IDcwMDsKfQoKY29kZSBhOmhvdmVyIHsKICBiYWNrZ3JvdW5kOiBub25lOwp9CgplbSBjb2RlIHsKICBmb250LXN0eWxlOiBub3JtYWw7Cn0KCiNjaGFuZ2Vsb2cgI2d0b2MgewogIGRpc3BsYXk6IG5vbmU7Cn0KCiNndG9jIHsKICBtYXJnaW4tdG9wOiAuNXJlbTsKICBtYXJnaW4tYm90dG9tOiAxcmVtOwp9CgojZ3RvYyB1bCB7CiAgbGlzdC1zdHlsZTogbm9uZTsKICBtYXJnaW4tbGVmdDogMDsKICBsaW5lLWhlaWdodDogMS41cmVtOwp9CgojZ3RvYyA+IHVsID4gbGkgewogIGRpc3BsYXk6IGlubGluZTsKICBib3JkZXItcmlnaHQ6IDFweCAjMDAwIHNvbGlkOwogIG1hcmdpbi1yaWdodDogMC40cmVtOwogIHBhZGRpbmctcmlnaHQ6IDAuNHJlbTsKfQoKI2d0b2MgPiB1bCA+IGxpOmxhc3QtY2hpbGQgewogIGJvcmRlci1yaWdodDogbm9uZTsKICBtYXJnaW4tcmlnaHQ6IDA7CiAgcGFkZGluZy1yaWdodDogMDsKfQoKbGkudmVyc2lvbi1waWNrZXIgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKbGkudmVyc2lvbi1waWNrZXI6aG92ZXIgPiBhIHsKICBib3JkZXItcmFkaXVzOiAycHggMnB4IDAgMDsKfQoKbGkudmVyc2lvbi1waWNrZXI6aG92ZXIgPiBvbCB7CiAgZGlzcGxheTogYmxvY2s7CiAgei1pbmRleDogMTsKfQoKbGkudmVyc2lvbi1waWNrZXIgYSBzcGFuIHsKICBmb250LXNpemU6IC43cmVtOwp9CgpvbC52ZXJzaW9uLXBpY2tlciB7CiAgYmFja2dyb3VuZDogI2ZmZjsKICBib3JkZXI6IDFweCAjNDM4NTNkIHNvbGlkOwogIGJvcmRlci1yYWRpdXM6IDAgMCAycHggMnB4OwogIGRpc3BsYXk6IG5vbmU7CiAgbGlzdC1zdHlsZTogbm9uZTsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgcmlnaHQ6IDA7CiAgdG9wOiAxLjI1cmVtOwogIHdpZHRoOiAxMDAlOwp9CgojZ3RvYyBvbC52ZXJzaW9uLXBpY2tlciBsaSB7CiAgZGlzcGxheTogYmxvY2s7CiAgYm9yZGVyLXJpZ2h0OiAwOwogIG1hcmdpbi1yaWdodDogMDsKfQoKb2wudmVyc2lvbi1waWNrZXIgbGkgYSB7CiAgYm9yZGVyLXJhZGl1czogMDsKICBkaXNwbGF5OiBibG9jazsKICBtYXJnaW46IDA7CiAgcGFkZGluZzogLjFyZW07CiAgcGFkZGluZy1sZWZ0OiAxcmVtOwp9CgpvbC52ZXJzaW9uLXBpY2tlciBsaTpsYXN0LWNoaWxkIGEgewogIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAxcHg7CiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMXB4Owp9CgoubGluZSB7CiAgd2lkdGg6IGNhbGMoMTAwJSAtIDFyZW0pOwogIGRpc3BsYXk6IGJsb2NrOwogIHBhZGRpbmctYm90dG9tOiAxcHg7Cn0KCi5hcGlfc3RhYmlsaXR5IHsKICBjb2xvcjogd2hpdGUgIWltcG9ydGFudDsKICBtYXJnaW46IDAgMCAxcmVtIDA7CiAgZm9udC1mYW1pbHk6ICJMYXRvIiwgIkx1Y2lkYSBHcmFuZGUiLCAiTHVjaWRhIFNhbnMgVW5pY29kZSIsICJMdWNpZGEgU2FucyIsIFZlcmRhbmEsIFRhaG9tYSwgc2Fucy1zZXJpZjsKICBwYWRkaW5nOiAxcmVtOwogIGxpbmUtaGVpZ2h0OiAxLjU7Cn0KCi5hcGlfc3RhYmlsaXR5ICogewogIGNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50Owp9CgouYXBpX3N0YWJpbGl0eSBhIHsKICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKfQoKLmFwaV9zdGFiaWxpdHkgYTpob3ZlciwgLmFwaV9zdGFiaWxpdHkgYTphY3RpdmUsIC5hcGlfc3RhYmlsaXR5IGE6Zm9jdXMgewogIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgLjQpOwp9CgouYXBpX3N0YWJpbGl0eSBhIGNvZGUgewogIGJhY2tncm91bmQ6IG5vbmU7Cn0KCi5hcGlfc3RhYmlsaXR5XzAgewogIGJhY2tncm91bmQtY29sb3I6ICNENjAwMjc7Cn0KCi5hcGlfc3RhYmlsaXR5XzEgewogIGJhY2tncm91bmQtY29sb3I6ICNFQzUzMTU7Cn0KCi5hcGlfc3RhYmlsaXR5XzIgewogIGJhY2tncm91bmQtY29sb3I6ICM0RUJBMEY7Cn0KCi5hcGlfbWV0YWRhdGEgewogIGZvbnQtc2l6ZTogLjg1cmVtOwogIG1hcmdpbi1ib3R0b206IDFyZW07Cn0KCi5hcGlfbWV0YWRhdGEgc3BhbiB7CiAgbWFyZ2luLXJpZ2h0OiAxcmVtOwp9CgouYXBpX21ldGFkYXRhIHNwYW46bGFzdC1jaGlsZCB7CiAgbWFyZ2luLXJpZ2h0OiAwcHg7Cn0KCnVsLnBsYWluIHsKICBsaXN0LXN0eWxlOiBub25lOwp9CgphYmJyIHsKICBib3JkZXItYm90dG9tOiAxcHggZG90dGVkICM0NTQ1NDU7Cn0KCnAgewogIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7CiAgbWFyZ2luOiAwIDAgMS4xMjVyZW0gMDsKICBsaW5lLWhlaWdodDogMS41Owp9CgojYXBpY29udGVudCA+ICo6bGFzdC1jaGlsZCB7CiAgbWFyZ2luLWJvdHRvbTogMDsKICBwYWRkaW5nLWJvdHRvbTogMnJlbTsKfQoKdGFibGUgewogIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgbWFyZ2luOiAwIDAgMS41cmVtIDA7Cn0KCnRoLCB0ZCB7CiAgYm9yZGVyOiAxcHggc29saWQgI2FhYTsKICBwYWRkaW5nOiAuNzVyZW0gMXJlbSAuNzVyZW0gMXJlbTsKICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwp9Cgp0aCB7CiAgdGV4dC1hbGlnbjpsZWZ0Owp9CgpvbCwgdWwsIGRsIHsKICBtYXJnaW46IDAgMCAuNnJlbSAwOwogIHBhZGRpbmc6IDA7Cn0KCm9sIHVsLCBvbCBvbCwgb2wgZGwsIHVsIHVsLCB1bCBvbCwgdWwgZGwsIGRsIHVsLCBkbCBvbCwgZGwgZGwgewogIG1hcmdpbi1ib3R0b206IDA7Cn0KCnVsLCBvbCB7CiAgbWFyZ2luLWxlZnQ6IDJyZW07Cn0KCmRsIGR0IHsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgbWFyZ2luOiAxLjVyZW0gMCAwOwp9CgpkbCBkZCB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIG1hcmdpbjogMCAxcmVtIDA7Cn0KCmRkICsgZHQucHJlIHsKICBtYXJnaW4tdG9wOiAxLjZyZW07Cn0KCiNhcGljb250ZW50IHsKICBwYWRkaW5nLXRvcDogMXJlbTsKfQoKI2FwaWNvbnRlbnQgLmxpbmUgewogIHdpZHRoOiBjYWxjKDUwJSAtIDFyZW0pOwogIG1hcmdpbjogMXJlbSAxcmVtIC45NXJlbTsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2NjOwp9CgpoMiArIGgyIHsKICBtYXJnaW46IDAgMCAuNXJlbTsKfQoKaDMgKyBoMyB7CiAgbWFyZ2luOiAwIDAgLjVyZW07Cn0KCmgyLCBoMywgaDQsIGg1IHsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgcGFkZGluZy1yaWdodDogNDBweDsKfQoKLnNyY2xpbmsgewogIGZsb2F0OiByaWdodDsKICBmb250LXNpemU6IHNtYWxsZXI7Cn0KCmgxIHNwYW4sIGgyIHNwYW4sIGgzIHNwYW4sIGg0IHNwYW4gewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICBkaXNwbGF5OiBibG9jazsKICB0b3A6IDA7CiAgcmlnaHQ6IDA7Cn0KCmgxIHNwYW46aG92ZXIsIGgyIHNwYW46aG92ZXIsIGgzIHNwYW46aG92ZXIsIGg0IHNwYW46aG92ZXIgewogIG9wYWNpdHk6IDE7Cn0KCmgxIHNwYW4gYSwgaDIgc3BhbiBhLCBoMyBzcGFuIGEsIGg0IHNwYW4gYSB7CiAgY29sb3I6ICMwMDA7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgpwcmUsIHR0LCBjb2RlIHsKICBsaW5lLWhlaWdodDogMS41cmVtOwogIG1hcmdpbjogMDsgcGFkZGluZzogMDsKfQoKLnByZSB7CiAgbGluZS1oZWlnaHQ6IDEuNXJlbTsKfQoKcHJlIHsKICBwYWRkaW5nOiAxcmVtOwogIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgYmFja2dyb3VuZDogI2YyZjJmMjsKICBtYXJnaW46IDFyZW07CiAgb3ZlcmZsb3cteDogYXV0bzsKfQoKcHJlID4gY29kZSB7CiAgcGFkZGluZzogMDsKfQoKcHJlICsgaDMgewogIG1hcmdpbi10b3A6IDIuMjI1cmVtOwp9Cgpjb2RlLnByZSB7CiAgd2hpdGUtc3BhY2U6IHByZTsKfQoKI2ludHJvIHsKICBtYXJnaW4tdG9wOiAxLjI1cmVtOwogIG1hcmdpbi1sZWZ0OiAxcmVtOwp9CgojaW50cm8gYSB7CiAgY29sb3I6ICNkZGQ7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCmhyIHsKICBiYWNrZ3JvdW5kOiBub25lOwogIGJvcmRlcjogbWVkaXVtIG5vbmU7CiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM3YTdhN2E7CiAgbWFyZ2luOiAwIDAgMXJlbSAwOwp9CgojdG9jIGgyIHsKICBtYXJnaW4tdG9wOiAwOwogIG1hcmdpbjogMS41cmVtIDA7Cn0KCiN0b2MgcCB7CiAgbWFyZ2luOiAwOwp9CgojdG9jIHVsIGEgewogIHRleHQtZGVjb3JhdGlvbjpub25lOwp9CgojdG9jIHVsIGxpIHsKICBtYXJnaW4tYm90dG9tOiAuNjY2cmVtOwogIGxpc3Qtc3R5bGU6IHNxdWFyZSBvdXRzaWRlOwp9CgojdG9jIGxpID4gdWwgewogIG1hcmdpbi10b3A6IC42NjZyZW07Cn0KCiN0b2MgLnN0YWJpbGl0eV8wOjphZnRlciB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2Q1MDAyNzsKICBjb2xvcjogI2ZmZjsKICBjb250ZW50OiAiZGVwcmVjYXRlZCI7CiAgbWFyZ2luLWxlZnQ6IC4yNXJlbTsKICBwYWRkaW5nOiAxcHggM3B4OwogIGJvcmRlci1yYWRpdXM6IDNweDsKfQoKI2FwaWNvbnRlbnQgbGkgewogIG1hcmdpbi1ib3R0b206IC41cmVtOwp9CgojYXBpY29udGVudCBsaTpsYXN0LWNoaWxkIHsKICBtYXJnaW4tYm90dG9tOiAwOwp9Cgp0dCwgY29kZSB7CiAgY29sb3I6ICMwNDA0MDQ7CiAgYmFja2dyb3VuZC1jb2xvcjogI2YyZjJmMjsKICBib3JkZXItcmFkaXVzOiAycHg7CiAgcGFkZGluZzogMXB4IDNweDsKfQoKLmFwaV9zdGFiaWxpdHkgY29kZSB7CiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAuMSk7Cn0KCmEgY29kZSB7CiAgY29sb3I6IGluaGVyaXQ7CiAgYmFja2dyb3VuZDogaW5oZXJpdDsKICBwYWRkaW5nOiAwOwp9CgoudHlwZSB7CiAgbGluZS1oZWlnaHQ6IDEuNXJlbTsKfQoKI2NvbHVtbjEuaW50ZXJpb3IgewogIG1hcmdpbi1sZWZ0OiAyMzRweDsKICBwYWRkaW5nOiAwIDJyZW07CiAgLXdlYmtpdC1wYWRkaW5nLXN0YXJ0OiAxLjVyZW07Cn0KCiNjb2x1bW4yLmludGVyaW9yIHsKICB3aWR0aDogMjM0cHg7CiAgYmFja2dyb3VuZDogIzMzMzsKICBwb3NpdGlvbjogZml4ZWQ7CiAgbGVmdDogMDsKICB0b3A6IDA7CiAgYm90dG9tOiAwOwogIG92ZXJmbG93LXg6IGhpZGRlbjsKICBvdmVyZmxvdy15OiBzY3JvbGw7Cn0KCiNjb2x1bW4yIHVsIHsKICBsaXN0LXN0eWxlOiBub25lOwogIG1hcmdpbjogLjlyZW0gMCAuNXJlbTsKICBiYWNrZ3JvdW5kOiAjMzMzOwp9CgojY29sdW1uMiA+IDpmaXJzdC1jaGlsZCB7CiAgbWFyZ2luOiAxLjI1cmVtOwogIGZvbnQtc2l6ZTogMS41cmVtOwp9CgojY29sdW1uMiA+IHVsOm50aC1jaGlsZCgyKSB7CiAgbWFyZ2luOiAxLjI1cmVtIDAgLjVyZW07Cn0KCiNjb2x1bW4yID4gdWw6bGFzdC1jaGlsZCB7CiAgbWFyZ2luOiAuOXJlbSAwIDEuMjVyZW07Cn0KCiNjb2x1bW4yIHVsIGxpIHsKICBwYWRkaW5nLWxlZnQ6IDEuMjVyZW07CiAgbWFyZ2luLWJvdHRvbTogLjVyZW07CiAgcGFkZGluZy1ib3R0b206IC41cmVtOwp9CgojY29sdW1uMiAubGluZSB7CiAgbWFyZ2luOiAwIC41cmVtOwogIGJhY2tncm91bmQtY29sb3I6ICM3MDcwNzA7Cn0KCiNjb2x1bW4yIHVsIGxpOmxhc3QtY2hpbGQgewogIG1hcmdpbi1ib3R0b206IDA7Cn0KCiNjb2x1bW4yIHVsIGxpIGEgewogIGNvbG9yOiAjY2NjOwogIGJvcmRlci1yYWRpdXM6IDA7Cn0KCiNjb2x1bW4yIHVsIGxpIGEuYWN0aXZlLCAjY29sdW1uMiB1bCBsaSBhLmFjdGl2ZTpob3ZlciwKI2NvbHVtbjIgdWwgbGkgYS5hY3RpdmU6Zm9jdXMgewogIGNvbG9yOiAjNDM4NTNkOwogIGJvcmRlci1yYWRpdXM6IDA7CiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM0Mzg1M2Q7CiAgYmFja2dyb3VuZDogbm9uZTsKfQoKI2ludHJvIGE6aG92ZXIsICNpbnRybyBhOmZvY3VzLAojY29sdW1uMiB1bCBsaSBhOmhvdmVyLCAjY29sdW1uMiB1bCBsaSBhOmZvY3VzIHsKICBjb2xvcjogI2ZmZjsKICBiYWNrZ3JvdW5kOiBub25lOwp9CgpzcGFuID4gLm1hcmssIHNwYW4gPiAubWFyazp2aXNpdGVkIHsKICBjb2xvcjogIzcwNzA3MDsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAwcHg7CiAgcmlnaHQ6IDBweDsKfQoKc3BhbiA+IC5tYXJrOmhvdmVyLCBzcGFuID4gLm1hcms6Zm9jdXMsIHNwYW4gPiAubWFyazphY3RpdmUgewogIGNvbG9yOiAjNDM4NTNkOwogIGJhY2tncm91bmQ6IG5vbmU7Cn0KCnRoID4gKjpsYXN0LWNoaWxkLCB0ZCA+ICo6bGFzdC1jaGlsZCB7CiAgbWFyZ2luLWJvdHRvbTogMDsKfQoKLmNoYW5nZWxvZyA+IHN1bW1hcnkgewogIG1hcmdpbjogLjVyZW0gMDsKICBwYWRkaW5nOiAuNXJlbSAwOwogIGN1cnNvcjogcG9pbnRlcjsKfQoKLyogc2ltcGxlciBjbGVhcmZpeCAqLwouY2xlYXJmaXg6YWZ0ZXIgewogIGNvbnRlbnQ6ICIuIjsKICBkaXNwbGF5OiBibG9jazsKICBoZWlnaHQ6IDA7CiAgY2xlYXI6IGJvdGg7CiAgdmlzaWJpbGl0eTogaGlkZGVuOwp9CgouZ2l0aHViX2ljb24gewogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgbWFyZ2luOiAtMnB4IDNweCAwIDA7Cn0KCkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMTAyNHB4KSB7CiAgI2NvbnRlbnQgewogICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgfQogICNjb2x1bW4xLmludGVyaW9yIHsKICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgcGFkZGluZy1sZWZ0OiAuNXJlbTsKICAgIHBhZGRpbmctcmlnaHQ6IC41cmVtOwogICAgd2lkdGg6IGF1dG87CiAgICBvdmVyZmxvdy15OiB2aXNpYmxlOwogIH0KICAjY29sdW1uMiB7CiAgICBkaXNwbGF5OiBub25lOwogIH0KfQoKQG1lZGlhIHByaW50IHsKICBodG1sIHsKICAgIGhlaWdodDogYXV0bzsKICAgIGZvbnQtc2l6ZTogMC43NWVtOwogIH0KICAjY29sdW1uMi5pbnRlcmlvciB7CiAgICBkaXNwbGF5OiBub25lOwogIH0KICAjY29sdW1uMS5pbnRlcmlvciB7CiAgICBtYXJnaW4tbGVmdDogMHB4OwogICAgcGFkZGluZzogMHB4OwogICAgb3ZlcmZsb3cteTogYXV0bzsKICB9CiAgLmFwaV9tZXRhZGF0YSwKICAjdG9jLAogIC5zcmNsaW5rLAogICNndG9jLAogIC5tYXJrIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQogIGgxIHsKICAgIGZvbnQtc2l6ZTogMnJlbTsKICB9CiAgaDIgewogICAgZm9udC1zaXplOiAxLjc1cmVtOwogIH0KICBoMyB7CiAgICBmb250LXNpemU6IDEuNXJlbTsKICB9CiAgaDQgewogICAgZm9udC1zaXplOiAxLjNyZW07CiAgfQogIGg1IHsKICAgIGZvbnQtc2l6ZTogMS4ycmVtOwogIH0KICBoNiB7CiAgICBmb250LXNpemU6IDEuMXJlbTsKICB9CiAgLmFwaV9zdGFiaWxpdHkgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIH0KICAuYXBpX3N0YWJpbGl0eSBhIHsKICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICB9CiAgYSB7CiAgICBjb2xvcjogaW5oZXJpdDsKICB9CiAgI2FwaWNvbnRlbnQgewogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICB9Cn0K"> <link rel="stylesheet" href="data:text/css;base64,LnNoX3NvdXJjZUNvZGUgewogIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgZm9udC1zdHlsZTogbm9ybWFsOwp9Cgouc2hfc291cmNlQ29kZSAuc2hfc3ltYm9sLAouc2hfc291cmNlQ29kZSAuc2hfY2JyYWNrZXQgewogIGNvbG9yOiAjMzMzOwp9Cgouc2hfc291cmNlQ29kZSAuc2hfa2V5d29yZCB7CiAgY29sb3I6ICMzMzg7Cn0KCi5zaF9zb3VyY2VDb2RlIC5zaF9zdHJpbmcsCi5zaF9zb3VyY2VDb2RlIC5zaF9yZWdleHAsCi5zaF9zb3VyY2VDb2RlIC5zaF9udW1iZXIsCi5zaF9zb3VyY2VDb2RlIC5zaF9zcGVjaWFsY2hhciB7CiAgY29sb3I6ICNFNTQzMDU7Cn0KCi5zaF9zb3VyY2VDb2RlIC5zaF9jb21tZW50IHsKICBjb2xvcjogIzY2NjsKICBmb250LXdlaWdodDogbGlnaHRlcjsKfQo="> <link rel="canonical" href="https://nodejs.org/api/fs.html"> </head> <body class="alt apidoc" id="api-section-fs"> <div id="content" class="clearfix"> <div id="column2" class="interior"> <div id="intro" class="interior"> <a href="https://nodejs.org/" title="Go back to the home page"> Node.js </a> </div> <ul> <li><a href="https://nodejs.org/api/documentation.html" class="nav-documentation">About these Docs</a></li> <li><a href="https://nodejs.org/api/synopsis.html" class="nav-synopsis">Usage &amp; Example</a></li> </ul> <div class="line"></div> <ul> <li><a href="https://nodejs.org/api/assert.html" class="nav-assert">Assertion Testing</a></li> <li><a href="https://nodejs.org/api/async_hooks.html" class="nav-async_hooks">Async Hooks</a></li> <li><a href="https://nodejs.org/api/buffer.html" class="nav-buffer">Buffer</a></li> <li><a href="https://nodejs.org/api/addons.html" class="nav-addons">C++ Addons</a></li> <li><a href="https://nodejs.org/api/n-api.html" class="nav-n-api">C/C++ Addons - N-API</a></li> <li><a href="https://nodejs.org/api/child_process.html" class="nav-child_process">Child Processes</a></li> <li><a href="https://nodejs.org/api/cluster.html" class="nav-cluster">Cluster</a></li> <li><a href="https://nodejs.org/api/cli.html" class="nav-cli">Command Line Options</a></li> <li><a href="https://nodejs.org/api/console.html" class="nav-console">Console</a></li> <li><a href="https://nodejs.org/api/crypto.html" class="nav-crypto">Crypto</a></li> <li><a href="https://nodejs.org/api/debugger.html" class="nav-debugger">Debugger</a></li> <li><a href="https://nodejs.org/api/deprecations.html" class="nav-deprecations">Deprecated APIs</a></li> <li><a href="https://nodejs.org/api/dns.html" class="nav-dns">DNS</a></li> <li><a href="https://nodejs.org/api/domain.html" class="nav-domain">Domain</a></li> <li><a href="https://nodejs.org/api/esm.html" class="nav-esm">ECMAScript Modules</a></li> <li><a href="https://nodejs.org/api/errors.html" class="nav-errors">Errors</a></li> <li><a href="https://nodejs.org/api/events.html" class="nav-events">Events</a></li> <li><a href="https://nodejs.org/api/fs.html" class="nav-fs active">File System</a></li> <li><a href="https://nodejs.org/api/globals.html" class="nav-globals">Globals</a></li> <li><a href="https://nodejs.org/api/http.html" class="nav-http">HTTP</a></li> <li><a href="https://nodejs.org/api/http2.html" class="nav-http2">HTTP/2</a></li> <li><a href="https://nodejs.org/api/https.html" class="nav-https">HTTPS</a></li> <li><a href="https://nodejs.org/api/inspector.html" class="nav-inspector">Inspector</a></li> <li><a href="https://nodejs.org/api/intl.html" class="nav-intl">Internationalization</a></li> <li><a href="https://nodejs.org/api/modules.html" class="nav-modules">Modules</a></li> <li><a href="https://nodejs.org/api/net.html" class="nav-net">Net</a></li> <li><a href="https://nodejs.org/api/os.html" class="nav-os">OS</a></li> <li><a href="https://nodejs.org/api/path.html" class="nav-path">Path</a></li> <li><a href="https://nodejs.org/api/perf_hooks.html" class="nav-perf_hooks">Performance Hooks</a></li> <li><a href="https://nodejs.org/api/policy.html" class="nav-policy">Policies</a></li> <li><a href="https://nodejs.org/api/process.html" class="nav-process">Process</a></li> <li><a href="https://nodejs.org/api/punycode.html" class="nav-punycode">Punycode</a></li> <li><a href="https://nodejs.org/api/querystring.html" class="nav-querystring">Query Strings</a></li> <li><a href="https://nodejs.org/api/readline.html" class="nav-readline">Readline</a></li> <li><a href="https://nodejs.org/api/repl.html" class="nav-repl">REPL</a></li> <li><a href="https://nodejs.org/api/report.html" class="nav-report">Report</a></li> <li><a href="https://nodejs.org/api/stream.html" class="nav-stream">Stream</a></li> <li><a href="https://nodejs.org/api/string_decoder.html" class="nav-string_decoder">String Decoder</a></li> <li><a href="https://nodejs.org/api/timers.html" class="nav-timers">Timers</a></li> <li><a href="https://nodejs.org/api/tls.html" class="nav-tls">TLS/SSL</a></li> <li><a href="https://nodejs.org/api/tracing.html" class="nav-tracing">Trace Events</a></li> <li><a href="https://nodejs.org/api/tty.html" class="nav-tty">TTY</a></li> <li><a href="https://nodejs.org/api/dgram.html" class="nav-dgram">UDP/Datagram</a></li> <li><a href="https://nodejs.org/api/url.html" class="nav-url">URL</a></li> <li><a href="https://nodejs.org/api/util.html" class="nav-util">Utilities</a></li> <li><a href="https://nodejs.org/api/v8.html" class="nav-v8">V8</a></li> <li><a href="https://nodejs.org/api/vm.html" class="nav-vm">VM</a></li> <li><a href="https://nodejs.org/api/worker_threads.html" class="nav-worker_threads">Worker Threads</a></li> <li><a href="https://nodejs.org/api/zlib.html" class="nav-zlib">Zlib</a></li> </ul> <div class="line"></div> <ul> <li><a href="https://github.com/nodejs/node" class="nav-https-github-com-nodejs-node">GitHub Repo &amp; Issue Tracker</a></li> </ul> </div> <div id="column1" data-id="fs" class="interior"> <header> <h1>Node.js v12.10.0 Documentation</h1> <div id="gtoc"> <ul> <li> <a href="https://nodejs.org/api/index.html" name="toc">Index</a> </li> <li> <a href="https://nodejs.org/api/all.html">View on single page</a> </li> <li> <a href="https://nodejs.org/api/fs.json">View as JSON</a> </li> <li class="version-picker"> <a href="#">View another version <span>▼</span></a> <ol class="version-picker"><li><a href="https://nodejs.org/docs/latest-v12.x/api/fs.html">12.x</a></li> <li><a href="https://nodejs.org/docs/latest-v11.x/api/fs.html">11.x</a></li> <li><a href="https://nodejs.org/docs/latest-v10.x/api/fs.html">10.x <b>LTS</b></a></li> <li><a href="https://nodejs.org/docs/latest-v9.x/api/fs.html">9.x</a></li> <li><a href="https://nodejs.org/docs/latest-v8.x/api/fs.html">8.x <b>LTS</b></a></li> <li><a href="https://nodejs.org/docs/latest-v7.x/api/fs.html">7.x</a></li> <li><a href="https://nodejs.org/docs/latest-v6.x/api/fs.html">6.x</a></li> <li><a href="https://nodejs.org/docs/latest-v5.x/api/fs.html">5.x</a></li> <li><a href="https://nodejs.org/docs/latest-v4.x/api/fs.html">4.x</a></li> <li><a href="https://nodejs.org/docs/latest-v0.12.x/api/fs.html">0.12.x</a></li> <li><a href="https://nodejs.org/docs/latest-v0.10.x/api/fs.html">0.10.x</a></li></ol> </li> <li class="edit_on_github"><a href="https://github.com/nodejs/node/edit/master/doc/api/fs.md"><span class="github_icon"><svg height="16" width="16" viewBox="0 0 16.1 16.1" fill="currentColor"><path d="M8 0a8 8 0 0 0-2.5 15.6c.4 0 .5-.2.5-.4v-1.5c-2 .4-2.5-.5-2.7-1 0-.1-.5-.9-.8-1-.3-.2-.7-.6 0-.6.6 0 1 .6 1.2.8.7 1.2 1.9 1 2.4.7 0-.5.2-.9.5-1-1.8-.3-3.7-1-3.7-4 0-.9.3-1.6.8-2.2 0-.2-.3-1 .1-2 0 0 .7-.3 2.2.7a7.4 7.4 0 0 1 4 0c1.5-1 2.2-.8 2.2-.8.5 1.1.2 2 .1 2.1.5.6.8 1.3.8 2.2 0 3-1.9 3.7-3.6 4 .3.2.5.7.5 1.4v2.2c0 .2.1.5.5.4A8 8 0 0 0 16 8a8 8 0 0 0-8-8z"></path></svg></span>Edit on GitHub</a></li> </ul> </div> <hr> </header> <div id="toc"> <h2>Table of Contents</h2> <ul> <li> <p><span class="stability_2"><a href="#fs_file_system">File System</a></span></p> <ul> <li> <p><a href="#fs_file_paths">File paths</a></p> <ul> <li><a href="#fs_url_object_support">URL object support</a></li> </ul> </li> <li><a href="#fs_file_descriptors">File Descriptors</a></li> <li><a href="#fs_threadpool_usage">Threadpool Usage</a></li> <li> <p><a href="#fs_class_fs_dirent">Class: fs.Dirent</a></p> <ul> <li><a href="#fs_dirent_isblockdevice">dirent.isBlockDevice()</a></li> <li><a href="#fs_dirent_ischaracterdevice">dirent.isCharacterDevice()</a></li> <li><a href="#fs_dirent_isdirectory">dirent.isDirectory()</a></li> <li><a href="#fs_dirent_isfifo">dirent.isFIFO()</a></li> <li><a href="#fs_dirent_isfile">dirent.isFile()</a></li> <li><a href="#fs_dirent_issocket">dirent.isSocket()</a></li> <li><a href="#fs_dirent_issymboliclink">dirent.isSymbolicLink()</a></li> <li><a href="#fs_dirent_name">dirent.name</a></li> </ul> </li> <li> <p><a href="#fs_class_fs_fswatcher">Class: fs.FSWatcher</a></p> <ul> <li><a href="#fs_event_change">Event: 'change'</a></li> <li><a href="#fs_event_close">Event: 'close'</a></li> <li><a href="#fs_event_error">Event: 'error'</a></li> <li><a href="#fs_watcher_close">watcher.close()</a></li> </ul> </li> <li> <p><a href="#fs_class_fs_readstream">Class: fs.ReadStream</a></p> <ul> <li><a href="#fs_event_close_1">Event: 'close'</a></li> <li><a href="#fs_event_open">Event: 'open'</a></li> <li><a href="#fs_event_ready">Event: 'ready'</a></li> <li><a href="#fs_readstream_bytesread">readStream.bytesRead</a></li> <li><a href="#fs_readstream_path">readStream.path</a></li> <li><a href="#fs_readstream_pending">readStream.pending</a></li> </ul> </li> <li> <p><a href="#fs_class_fs_stats">Class: fs.Stats</a></p> <ul> <li><a href="#fs_stats_isblockdevice">stats.isBlockDevice()</a></li> <li><a href="#fs_stats_ischaracterdevice">stats.isCharacterDevice()</a></li> <li><a href="#fs_stats_isdirectory">stats.isDirectory()</a></li> <li><a href="#fs_stats_isfifo">stats.isFIFO()</a></li> <li><a href="#fs_stats_isfile">stats.isFile()</a></li> <li><a href="#fs_stats_issocket">stats.isSocket()</a></li> <li><a href="#fs_stats_issymboliclink">stats.isSymbolicLink()</a></li> <li><a href="#fs_stats_dev">stats.dev</a></li> <li><a href="#fs_stats_ino">stats.ino</a></li> <li><a href="#fs_stats_mode">stats.mode</a></li> <li><a href="#fs_stats_nlink">stats.nlink</a></li> <li><a href="#fs_stats_uid">stats.uid</a></li> <li><a href="#fs_stats_gid">stats.gid</a></li> <li><a href="#fs_stats_rdev">stats.rdev</a></li> <li><a href="#fs_stats_size">stats.size</a></li> <li><a href="#fs_stats_blksize">stats.blksize</a></li> <li><a href="#fs_stats_blocks">stats.blocks</a></li> <li><a href="#fs_stats_atimems">stats.atimeMs</a></li> <li><a href="#fs_stats_mtimems">stats.mtimeMs</a></li> <li><a href="#fs_stats_ctimems">stats.ctimeMs</a></li> <li><a href="#fs_stats_birthtimems">stats.birthtimeMs</a></li> <li><a href="#fs_stats_atimens">stats.atimeNs</a></li> <li><a href="#fs_stats_mtimens">stats.mtimeNs</a></li> <li><a href="#fs_stats_ctimens">stats.ctimeNs</a></li> <li><a href="#fs_stats_birthtimens">stats.birthtimeNs</a></li> <li><a href="#fs_stats_atime">stats.atime</a></li> <li><a href="#fs_stats_mtime">stats.mtime</a></li> <li><a href="#fs_stats_ctime">stats.ctime</a></li> <li><a href="#fs_stats_birthtime">stats.birthtime</a></li> <li><a href="#fs_stat_time_values">Stat Time Values</a></li> </ul> </li> <li> <p><a href="#fs_class_fs_writestream">Class: fs.WriteStream</a></p> <ul> <li><a href="#fs_event_close_2">Event: 'close'</a></li> <li><a href="#fs_event_open_1">Event: 'open'</a></li> <li><a href="#fs_event_ready_1">Event: 'ready'</a></li> <li><a href="#fs_writestream_byteswritten">writeStream.bytesWritten</a></li> <li><a href="#fs_writestream_path">writeStream.path</a></li> <li><a href="#fs_writestream_pending">writeStream.pending</a></li> </ul> </li> <li><a href="#fs_fs_access_path_mode_callback">fs.access(path[, mode], callback)</a></li> <li><a href="#fs_fs_accesssync_path_mode">fs.accessSync(path[, mode])</a></li> <li><a href="#fs_fs_appendfile_path_data_options_callback">fs.appendFile(path, data[, options], callback)</a></li> <li><a href="#fs_fs_appendfilesync_path_data_options">fs.appendFileSync(path, data[, options])</a></li> <li> <p><a href="#fs_fs_chmod_path_mode_callback">fs.chmod(path, mode, callback)</a></p> <ul> <li><a href="#fs_file_modes">File modes</a></li> </ul> </li> <li><a href="#fs_fs_chmodsync_path_mode">fs.chmodSync(path, mode)</a></li> <li><a href="#fs_fs_chown_path_uid_gid_callback">fs.chown(path, uid, gid, callback)</a></li> <li><a href="#fs_fs_chownsync_path_uid_gid">fs.chownSync(path, uid, gid)</a></li> <li><a href="#fs_fs_close_fd_callback">fs.close(fd, callback)</a></li> <li><a href="#fs_fs_closesync_fd">fs.closeSync(fd)</a></li> <li><a href="#fs_fs_constants">fs.constants</a></li> <li><a href="#fs_fs_copyfile_src_dest_flags_callback">fs.copyFile(src, dest[, flags], callback)</a></li> <li><a href="#fs_fs_copyfilesync_src_dest_flags">fs.copyFileSync(src, dest[, flags])</a></li> <li><a href="#fs_fs_createreadstream_path_options">fs.createReadStream(path[, options])</a></li> <li><a href="#fs_fs_createwritestream_path_options">fs.createWriteStream(path[, options])</a></li> <li><span class="stability_0"><a href="#fs_fs_exists_path_callback">fs.exists(path, callback)</a></span></li> <li><a href="#fs_fs_existssync_path">fs.existsSync(path)</a></li> <li><a href="#fs_fs_fchmod_fd_mode_callback">fs.fchmod(fd, mode, callback)</a></li> <li><a href="#fs_fs_fchmodsync_fd_mode">fs.fchmodSync(fd, mode)</a></li> <li><a href="#fs_fs_fchown_fd_uid_gid_callback">fs.fchown(fd, uid, gid, callback)</a></li> <li><a href="#fs_fs_fchownsync_fd_uid_gid">fs.fchownSync(fd, uid, gid)</a></li> <li><a href="#fs_fs_fdatasync_fd_callback">fs.fdatasync(fd, callback)</a></li> <li><a href="#fs_fs_fdatasyncsync_fd">fs.fdatasyncSync(fd)</a></li> <li><a href="#fs_fs_fstat_fd_options_callback">fs.fstat(fd[, options], callback)</a></li> <li><a href="#fs_fs_fstatsync_fd_options">fs.fstatSync(fd[, options])</a></li> <li><a href="#fs_fs_fsync_fd_callback">fs.fsync(fd, callback)</a></li> <li><a href="#fs_fs_fsyncsync_fd">fs.fsyncSync(fd)</a></li> <li><a href="#fs_fs_ftruncate_fd_len_callback">fs.ftruncate(fd[, len], callback)</a></li> <li><a href="#fs_fs_ftruncatesync_fd_len">fs.ftruncateSync(fd[, len])</a></li> <li><a href="#fs_fs_futimes_fd_atime_mtime_callback">fs.futimes(fd, atime, mtime, callback)</a></li> <li><a href="#fs_fs_futimessync_fd_atime_mtime">fs.futimesSync(fd, atime, mtime)</a></li> <li><a href="#fs_fs_lchmod_path_mode_callback">fs.lchmod(path, mode, callback)</a></li> <li><a href="#fs_fs_lchmodsync_path_mode">fs.lchmodSync(path, mode)</a></li> <li><a href="#fs_fs_lchown_path_uid_gid_callback">fs.lchown(path, uid, gid, callback)</a></li> <li><a href="#fs_fs_lchownsync_path_uid_gid">fs.lchownSync(path, uid, gid)</a></li> <li><a href="#fs_fs_link_existingpath_newpath_callback">fs.link(existingPath, newPath, callback)</a></li> <li><a href="#fs_fs_linksync_existingpath_newpath">fs.linkSync(existingPath, newPath)</a></li> <li><a href="#fs_fs_lstat_path_options_callback">fs.lstat(path[, options], callback)</a></li> <li><a href="#fs_fs_lstatsync_path_options">fs.lstatSync(path[, options])</a></li> <li><a href="#fs_fs_mkdir_path_options_callback">fs.mkdir(path[, options], callback)</a></li> <li><a href="#fs_fs_mkdirsync_path_options">fs.mkdirSync(path[, options])</a></li> <li><a href="#fs_fs_mkdtemp_prefix_options_callback">fs.mkdtemp(prefix[, options], callback)</a></li> <li><a href="#fs_fs_mkdtempsync_prefix_options">fs.mkdtempSync(prefix[, options])</a></li> <li><a href="#fs_fs_open_path_flags_mode_callback">fs.open(path[, flags[, mode]], callback)</a></li> <li><a href="#fs_fs_opensync_path_flags_mode">fs.openSync(path[, flags, mode])</a></li> <li><a href="#fs_fs_read_fd_buffer_offset_length_position_callback">fs.read(fd, buffer, offset, length, position, callback)</a></li> <li><a href="#fs_fs_readdir_path_options_callback">fs.readdir(path[, options], callback)</a></li> <li><a href="#fs_fs_readdirsync_path_options">fs.readdirSync(path[, options])</a></li> <li> <p><a href="#fs_fs_readfile_path_options_callback">fs.readFile(path[, options], callback)</a></p> <ul> <li><a href="#fs_file_descriptors_1">File Descriptors</a></li> </ul> </li> <li><a href="#fs_fs_readfilesync_path_options">fs.readFileSync(path[, options])</a></li> <li><a href="#fs_fs_readlink_path_options_callback">fs.readlink(path[, options], callback)</a></li> <li><a href="#fs_fs_readlinksync_path_options">fs.readlinkSync(path[, options])</a></li> <li><a href="#fs_fs_readsync_fd_buffer_offset_length_position">fs.readSync(fd, buffer, offset, length, position)</a></li> <li><a href="#fs_fs_realpath_path_options_callback">fs.realpath(path[, options], callback)</a></li> <li><a href="#fs_fs_realpath_native_path_options_callback">fs.realpath.native(path[, options], callback)</a></li> <li><a href="#fs_fs_realpathsync_path_options">fs.realpathSync(path[, options])</a></li> <li><a href="#fs_fs_realpathsync_native_path_options">fs.realpathSync.native(path[, options])</a></li> <li><a href="#fs_fs_rename_oldpath_newpath_callback">fs.rename(oldPath, newPath, callback)</a></li> <li><a href="#fs_fs_renamesync_oldpath_newpath">fs.renameSync(oldPath, newPath)</a></li> <li><span class="stability_1"><a href="#fs_fs_rmdir_path_options_callback">fs.rmdir(path[, options], callback)</a></span></li> <li><span class="stability_1"><a href="#fs_fs_rmdirsync_path_options">fs.rmdirSync(path[, options])</a></span></li> <li><a href="#fs_fs_stat_path_options_callback">fs.stat(path[, options], callback)</a></li> <li><a href="#fs_fs_statsync_path_options">fs.statSync(path[, options])</a></li> <li><a href="#fs_fs_symlink_target_path_type_callback">fs.symlink(target, path[, type], callback)</a></li> <li><a href="#fs_fs_symlinksync_target_path_type">fs.symlinkSync(target, path[, type])</a></li> <li><a href="#fs_fs_truncate_path_len_callback">fs.truncate(path[, len], callback)</a></li> <li><a href="#fs_fs_truncatesync_path_len">fs.truncateSync(path[, len])</a></li> <li><a href="#fs_fs_unlink_path_callback">fs.unlink(path, callback)</a></li> <li><a href="#fs_fs_unlinksync_path">fs.unlinkSync(path)</a></li> <li><a href="#fs_fs_unwatchfile_filename_listener">fs.unwatchFile(filename[, listener])</a></li> <li><a href="#fs_fs_utimes_path_atime_mtime_callback">fs.utimes(path, atime, mtime, callback)</a></li> <li><a href="#fs_fs_utimessync_path_atime_mtime">fs.utimesSync(path, atime, mtime)</a></li> <li> <p><a href="#fs_fs_watch_filename_options_listener">fs.watch(filename[, options][, listener])</a></p> <ul> <li> <p><a href="#fs_caveats">Caveats</a></p> <ul> <li><a href="#fs_availability">Availability</a></li> <li><a href="#fs_inodes">Inodes</a></li> <li><a href="#fs_filename_argument">Filename Argument</a></li> </ul> </li> </ul> </li> <li><a href="#fs_fs_watchfile_filename_options_listener">fs.watchFile(filename[, options], listener)</a></li> <li><a href="#fs_fs_write_fd_buffer_offset_length_position_callback">fs.write(fd, buffer[, offset[, length[, position]]], callback)</a></li> <li><a href="#fs_fs_write_fd_string_position_encoding_callback">fs.write(fd, string[, position[, encoding]], callback)</a></li> <li> <p><a href="#fs_fs_writefile_file_data_options_callback">fs.writeFile(file, data[, options], callback)</a></p> <ul> <li><a href="#fs_using_fs_writefile_with_file_descriptors">Using <code>fs.writeFile()</code> with File Descriptors</a></li> </ul> </li> <li><a href="#fs_fs_writefilesync_file_data_options">fs.writeFileSync(file, data[, options])</a></li> <li><a href="#fs_fs_writesync_fd_buffer_offset_length_position">fs.writeSync(fd, buffer[, offset[, length[, position]]])</a></li> <li><a href="#fs_fs_writesync_fd_string_position_encoding">fs.writeSync(fd, string[, position[, encoding]])</a></li> <li><a href="#fs_fs_writev_fd_buffers_position_callback">fs.writev(fd, buffers[, position], callback)</a></li> <li><a href="#fs_fs_writevsync_fd_buffers_position">fs.writevSync(fd, buffers[, position])</a></li> <li> <p><a href="#fs_fs_promises_api">fs Promises API</a></p> <ul> <li> <p><a href="#fs_class_filehandle">class: FileHandle</a></p> <ul> <li><a href="#fs_filehandle_appendfile_data_options">filehandle.appendFile(data, options)</a></li> <li><a href="#fs_filehandle_chmod_mode">filehandle.chmod(mode)</a></li> <li><a href="#fs_filehandle_chown_uid_gid">filehandle.chown(uid, gid)</a></li> <li><a href="#fs_filehandle_close">filehandle.close()</a></li> <li><a href="#fs_filehandle_datasync">filehandle.datasync()</a></li> <li><a href="#fs_filehandle_fd">filehandle.fd</a></li> <li><a href="#fs_filehandle_read_buffer_offset_length_position">filehandle.read(buffer, offset, length, position)</a></li> <li><a href="#fs_filehandle_readfile_options">filehandle.readFile(options)</a></li> <li><a href="#fs_filehandle_stat_options">filehandle.stat([options])</a></li> <li><a href="#fs_filehandle_sync">filehandle.sync()</a></li> <li><a href="#fs_filehandle_truncate_len">filehandle.truncate(len)</a></li> <li><a href="#fs_filehandle_utimes_atime_mtime">filehandle.utimes(atime, mtime)</a></li> <li><a href="#fs_filehandle_write_buffer_offset_length_position">filehandle.write(buffer, offset, length, position)</a></li> <li><a href="#fs_filehandle_write_string_position_encoding">filehandle.write(string[, position[, encoding]])</a></li> <li><a href="#fs_filehandle_writefile_data_options">filehandle.writeFile(data, options)</a></li> <li><a href="#fs_filehandle_writev_buffers_position">filehandle.writev(buffers[, position])</a></li> </ul> </li> <li><a href="#fs_fspromises_access_path_mode">fsPromises.access(path[, mode])</a></li> <li><a href="#fs_fspromises_appendfile_path_data_options">fsPromises.appendFile(path, data[, options])</a></li> <li><a href="#fs_fspromises_chmod_path_mode">fsPromises.chmod(path, mode)</a></li> <li><a href="#fs_fspromises_chown_path_uid_gid">fsPromises.chown(path, uid, gid)</a></li> <li><a href="#fs_fspromises_copyfile_src_dest_flags">fsPromises.copyFile(src, dest[, flags])</a></li> <li><a href="#fs_fspromises_lchmod_path_mode">fsPromises.lchmod(path, mode)</a></li> <li><a href="#fs_fspromises_lchown_path_uid_gid">fsPromises.lchown(path, uid, gid)</a></li> <li><a href="#fs_fspromises_link_existingpath_newpath">fsPromises.link(existingPath, newPath)</a></li> <li><a href="#fs_fspromises_lstat_path_options">fsPromises.lstat(path[, options])</a></li> <li><a href="#fs_fspromises_mkdir_path_options">fsPromises.mkdir(path[, options])</a></li> <li><a href="#fs_fspromises_mkdtemp_prefix_options">fsPromises.mkdtemp(prefix[, options])</a></li> <li><a href="#fs_fspromises_open_path_flags_mode">fsPromises.open(path, flags[, mode])</a></li> <li><a href="#fs_fspromises_readdir_path_options">fsPromises.readdir(path[, options])</a></li> <li><a href="#fs_fspromises_readfile_path_options">fsPromises.readFile(path[, options])</a></li> <li><a href="#fs_fspromises_readlink_path_options">fsPromises.readlink(path[, options])</a></li> <li><a href="#fs_fspromises_realpath_path_options">fsPromises.realpath(path[, options])</a></li> <li><a href="#fs_fspromises_rename_oldpath_newpath">fsPromises.rename(oldPath, newPath)</a></li> <li><span class="stability_1"><a href="#fs_fspromises_rmdir_path_options">fsPromises.rmdir(path[, options])</a></span></li> <li><a href="#fs_fspromises_stat_path_options">fsPromises.stat(path[, options])</a></li> <li><a href="#fs_fspromises_symlink_target_path_type">fsPromises.symlink(target, path[, type])</a></li> <li><a href="#fs_fspromises_truncate_path_len">fsPromises.truncate(path[, len])</a></li> <li><a href="#fs_fspromises_unlink_path">fsPromises.unlink(path)</a></li> <li><a href="#fs_fspromises_utimes_path_atime_mtime">fsPromises.utimes(path, atime, mtime)</a></li> <li><a href="#fs_fspromises_writefile_file_data_options">fsPromises.writeFile(file, data[, options])</a></li> </ul> </li> <li> <p><a href="#fs_fs_constants_1">FS Constants</a></p> <ul> <li><a href="#fs_file_access_constants">File Access Constants</a></li> <li><a href="#fs_file_copy_constants">File Copy Constants</a></li> <li><a href="#fs_file_open_constants">File Open Constants</a></li> <li><a href="#fs_file_type_constants">File Type Constants</a></li> <li><a href="#fs_file_mode_constants">File Mode Constants</a></li> </ul> </li> <li><a href="#fs_file_system_flags">File System Flags</a></li> </ul> </li> </ul> </div> <div id="apicontent"> <h1>File System<span><a class="mark" href="#fs_file_system" id="fs_file_system">#</a></span></h1> <p></p><div class="api_stability api_stability_2"><a href="https://nodejs.org/api/documentation.html#documentation_stability_index">Stability: 2</a> - Stable</div><p></p> <p>The <code>fs</code> module provides an API for interacting with the file system in a manner closely modeled around standard POSIX functions.</p> <p>To use this module:</p> <pre><code class="language-js">const fs = require('fs'); </code></pre> <p>All file system operations have synchronous and asynchronous forms.</p> <p>The asynchronous form always takes a completion callback as its last argument. The arguments passed to the completion callback depend on the method, but the first argument is always reserved for an exception. If the operation was completed successfully, then the first argument will be <code>null</code> or <code>undefined</code>.</p> <pre><code class="language-js">const fs = require('fs'); fs.unlink('/tmp/hello', (err) =&gt; { if (err) throw err; console.log('successfully deleted /tmp/hello'); }); </code></pre> <p>Exceptions that occur using synchronous operations are thrown immediately and may be handled using <code>try…catch</code>, or may be allowed to bubble up.</p> <pre><code class="language-js">const fs = require('fs'); try { fs.unlinkSync('/tmp/hello'); console.log('successfully deleted /tmp/hello'); } catch (err) { // handle the error } </code></pre> <p>There is no guaranteed ordering when using asynchronous methods. So the following is prone to error because the <code>fs.stat()</code> operation may complete before the <code>fs.rename()</code> operation:</p> <pre><code class="language-js">fs.rename('/tmp/hello', '/tmp/world', (err) =&gt; { if (err) throw err; console.log('renamed complete'); }); fs.stat('/tmp/world', (err, stats) =&gt; { if (err) throw err; console.log(`stats: ${JSON.stringify(stats)}`); }); </code></pre> <p>To correctly order the operations, move the <code>fs.stat()</code> call into the callback of the <code>fs.rename()</code> operation:</p> <pre><code class="language-js">fs.rename('/tmp/hello', '/tmp/world', (err) =&gt; { if (err) throw err; fs.stat('/tmp/world', (err, stats) =&gt; { if (err) throw err; console.log(`stats: ${JSON.stringify(stats)}`); }); }); </code></pre> <p>In busy processes, use the asynchronous versions of these calls. The synchronous versions will block the entire process until they complete, halting all connections.</p> <p>While it is not recommended, most fs functions allow the callback argument to be omitted, in which case a default callback is used that rethrows errors. To get a trace to the original call site, set the <code>NODE_DEBUG</code> environment variable:</p> <p>Omitting the callback function on asynchronous fs functions is deprecated and may result in an error being thrown in the future.</p> <pre><code class="language-txt">$ cat script.js function bad() { require('fs').readFile('/'); } bad(); $ env NODE_DEBUG=fs node script.js fs.js:88 throw backtrace; ^ Error: EISDIR: illegal operation on a directory, read &lt;stack trace.&gt; </code></pre> <h2>File paths<span><a class="mark" href="#fs_file_paths" id="fs_file_paths">#</a></span></h2> <p>Most <code>fs</code> operations accept filepaths that may be specified in the form of a string, a <a href="https://nodejs.org/api/buffer.html#buffer_buffer"><code>Buffer</code></a>, or a <a href="https://nodejs.org/api/url.html#url_the_whatwg_url_api"><code>URL</code></a> object using the <code>file:</code> protocol.</p> <p>String form paths are interpreted as UTF-8 character sequences identifying the absolute or relative filename. Relative paths will be resolved relative to the current working directory as specified by <code>process.cwd()</code>.</p> <p>Example using an absolute path on POSIX:</p> <pre><code class="language-js">const fs = require('fs'); fs.open('/open/some/file.txt', 'r', (err, fd) =&gt; { if (err) throw err; fs.close(fd, (err) =&gt; { if (err) throw err; }); }); </code></pre> <p>Example using a relative path on POSIX (relative to <code>process.cwd()</code>):</p> <pre><code class="language-js">fs.open('file.txt', 'r', (err, fd) =&gt; { if (err) throw err; fs.close(fd, (err) =&gt; { if (err) throw err; }); }); </code></pre> <p>Paths specified using a <a href="https://nodejs.org/api/buffer.html#buffer_buffer"><code>Buffer</code></a> are useful primarily on certain POSIX operating systems that treat file paths as opaque byte sequences. On such systems, it is possible for a single file path to contain sub-sequences that use multiple character encodings. As with string paths, <code>Buffer</code> paths may be relative or absolute:</p> <p>Example using an absolute path on POSIX:</p> <pre><code class="language-js">fs.open(Buffer.from('/open/some/file.txt'), 'r', (err, fd) =&gt; { if (err) throw err; fs.close(fd, (err) =&gt; { if (err) throw err; }); }); </code></pre> <p>On Windows, Node.js follows the concept of per-drive working directory. This behavior can be observed when using a drive path without a backslash. For example <code>fs.readdirSync('c:\\')</code> can potentially return a different result than <code>fs.readdirSync('c:')</code>. For more information, see <a href="https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file#fully-qualified-vs-relative-paths">this MSDN page</a>.</p> <h3>URL object support<span><a class="mark" href="#fs_url_object_support" id="fs_url_object_support">#</a></span></h3> <div class="api_metadata"> <span>Added in: v7.6.0</span> </div> <p>For most <code>fs</code> module functions, the <code>path</code> or <code>filename</code> argument may be passed as a WHATWG <a href="https://nodejs.org/api/url.html#url_the_whatwg_url_api"><code>URL</code></a> object. Only <a href="https://nodejs.org/api/url.html#url_the_whatwg_url_api"><code>URL</code></a> objects using the <code>file:</code> protocol are supported.</p> <pre><code class="language-js">const fs = require('fs'); const fileUrl = new URL('file:///tmp/hello'); fs.readFileSync(fileUrl); </code></pre> <p><code>file:</code> URLs are always absolute paths.</p> <p>Using WHATWG <a href="https://nodejs.org/api/url.html#url_the_whatwg_url_api"><code>URL</code></a> objects might introduce platform-specific behaviors.</p> <p>On Windows, <code>file:</code> URLs with a hostname convert to UNC paths, while <code>file:</code> URLs with drive letters convert to local absolute paths. <code>file:</code> URLs without a hostname nor a drive letter will result in a throw:</p> <pre><code class="language-js">// On Windows : // - WHATWG file URLs with hostname convert to UNC path // file://hostname/p/a/t/h/file =&gt; \\hostname\p\a\t\h\file fs.readFileSync(new URL('file://hostname/p/a/t/h/file')); // - WHATWG file URLs with drive letters convert to absolute path // file:///C:/tmp/hello =&gt; C:\tmp\hello fs.readFileSync(new URL('file:///C:/tmp/hello')); // - WHATWG file URLs without hostname must have a drive letters fs.readFileSync(new URL('file:///notdriveletter/p/a/t/h/file')); fs.readFileSync(new URL('file:///c/p/a/t/h/file')); // TypeError [ERR_INVALID_FILE_URL_PATH]: File URL path must be absolute </code></pre> <p><code>file:</code> URLs with drive letters must use <code>:</code> as a separator just after the drive letter. Using another separator will result in a throw.</p> <p>On all other platforms, <code>file:</code> URLs with a hostname are unsupported and will result in a throw:</p> <pre><code class="language-js">// On other platforms: // - WHATWG file URLs with hostname are unsupported // file://hostname/p/a/t/h/file =&gt; throw! fs.readFileSync(new URL('file://hostname/p/a/t/h/file')); // TypeError [ERR_INVALID_FILE_URL_PATH]: must be absolute // - WHATWG file URLs convert to absolute path // file:///tmp/hello =&gt; /tmp/hello fs.readFileSync(new URL('file:///tmp/hello')); </code></pre> <p>A <code>file:</code> URL having encoded slash characters will result in a throw on all platforms:</p> <pre><code class="language-js">// On Windows fs.readFileSync(new URL('file:///C:/p/a/t/h/%2F')); fs.readFileSync(new URL('file:///C:/p/a/t/h/%2f')); /* TypeError [ERR_INVALID_FILE_URL_PATH]: File URL path must not include encoded \ or / characters */ // On POSIX fs.readFileSync(new URL('file:///p/a/t/h/%2F')); fs.readFileSync(new URL('file:///p/a/t/h/%2f')); /* TypeError [ERR_INVALID_FILE_URL_PATH]: File URL path must not include encoded / characters */ </code></pre> <p>On Windows, <code>file:</code> URLs having encoded backslash will result in a throw:</p> <pre><code class="language-js">// On Windows fs.readFileSync(new URL('file:///C:/path/%5C')); fs.readFileSync(new URL('file:///C:/path/%5c')); /* TypeError [ERR_INVALID_FILE_URL_PATH]: File URL path must not include encoded \ or / characters */ </code></pre> <h2>File Descriptors<span><a class="mark" href="#fs_file_descriptors" id="fs_file_descriptors">#</a></span></h2> <p>On POSIX systems, for every process, the kernel maintains a table of currently open files and resources. Each open file is assigned a simple numeric identifier called a <em>file descriptor</em>. At the system-level, all file system operations use these file descriptors to identify and track each specific file. Windows systems use a different but conceptually similar mechanism for tracking resources. To simplify things for users, Node.js abstracts away the specific differences between operating systems and assigns all open files a numeric file descriptor.</p> <p>The <code>fs.open()</code> method is used to allocate a new file descriptor. Once allocated, the file descriptor may be used to read data from, write data to, or request information about the file.</p> <pre><code class="language-js">fs.open('/open/some/file.txt', 'r', (err, fd) =&gt; { if (err) throw err; fs.fstat(fd, (err, stat) =&gt; { if (err) throw err; // use stat // always close the file descriptor! fs.close(fd, (err) =&gt; { if (err) throw err; }); }); }); </code></pre> <p>Most operating systems limit the number of file descriptors that may be open at any given time so it is critical to close the descriptor when operations are completed. Failure to do so will result in a memory leak that will eventually cause an application to crash.</p> <h2>Threadpool Usage<span><a class="mark" href="#fs_threadpool_usage" id="fs_threadpool_usage">#</a></span></h2> <p>All file system APIs except <code>fs.FSWatcher()</code> and those that are explicitly synchronous use libuv's threadpool, which can have surprising and negative performance implications for some applications. See the <a href="https://nodejs.org/api/cli.html#cli_uv_threadpool_size_size"><code>UV_THREADPOOL_SIZE</code></a> documentation for more information.</p> <h2>Class: fs.Dirent<spa