1
0
mirror of https://github.com/jbranchaud/til synced 2026-01-03 07:08:01 +00:00

Add Is This A Directory Or A File as a reason til

This commit is contained in:
jbranchaud
2018-08-03 00:51:26 -05:00
parent ada3dcdbb5
commit 8f12a39c6e
2 changed files with 40 additions and 1 deletions

View File

@@ -0,0 +1,38 @@
# Is This A Directory Or A File?
When compiling [ReasonML](https://reasonml.github.io/) natively, we have access to a variety of
additional modules including the `Unix` module. We can interact with
directories and files using functions on `Unix`.
```reason
let current_dir = Unix.opendir(Unix.getcwd());
let first_file = Unix.readdir(current_dir);
/* is first_file a directory or a file? */
Unix.closedir(current_dir);
```
Here we open the current working directory, grab the first thing out of that
directory -- maybe it's a file, maybe it's a directory, maybe it is
something else. Lastly, we close the directory.
```reason
let current_dir = Unix.opendir(Unix.getcwd());
let first_file = Unix.readdir(current_dir);
switch(Unix.stat(first_file)) {
| Unix.stats({ st_kind: Unix.S_REG }) => print_endline("Regular File")
| Unix.stats({ st_kind: Unix.S_DIR }) => print_endline("Directory")
| Unix.stats({ st_kind: Unix.S_LINK }) => print_endline("Link")
| Unix.stats({ st_kind: Unix.S_SOCK }) => print_endline("Socket")
| _ => print_endline("Something else")
};
Unix.closedir(current_dir);
```
There are a variety of kinds of files to switch on. Here, we are switching
on _Regular Files_, _Directories_, _Links_, and _Sockets_. Everything else
falls through.
See the [`Unix` module docs](https://reasonml.github.io/api/Unix.html) for
more details.