mirror of
https://github.com/jbranchaud/til
synced 2026-01-03 15:18:01 +00:00
Add Is This A Directory Or A File as a reason til
This commit is contained in:
@@ -10,7 +10,7 @@ smart people at [Hashrocket](http://hashrocket.com/).
|
|||||||
For a steady stream of TILs from a variety of rocketeers, checkout
|
For a steady stream of TILs from a variety of rocketeers, checkout
|
||||||
[til.hashrocket.com](https://til.hashrocket.com/).
|
[til.hashrocket.com](https://til.hashrocket.com/).
|
||||||
|
|
||||||
_695 TILs and counting..._
|
_696 TILs and counting..._
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -511,6 +511,7 @@ _695 TILs and counting..._
|
|||||||
- [Generate Starter Reason Projects](reason/generate-starter-reason-projects.md)
|
- [Generate Starter Reason Projects](reason/generate-starter-reason-projects.md)
|
||||||
- [Helping The Compiler Help Us With Variants](reason/helping-the-compiler-help-us-with-variants.md)
|
- [Helping The Compiler Help Us With Variants](reason/helping-the-compiler-help-us-with-variants.md)
|
||||||
- [Inline Component Styles With Reason React](reason/inline-component-styles-with-reason-react.md)
|
- [Inline Component Styles With Reason React](reason/inline-component-styles-with-reason-react.md)
|
||||||
|
- [Is This A Directory Or A File](reason/is-this-a-directory-or-a-file.md)
|
||||||
- [Making Things Mutable](reason/making-things-mutable.md)
|
- [Making Things Mutable](reason/making-things-mutable.md)
|
||||||
- [Multi-Argument Functions As Syntactic Sugar](reason/multi-argument-functions-as-syntactic-sugar.md)
|
- [Multi-Argument Functions As Syntactic Sugar](reason/multi-argument-functions-as-syntactic-sugar.md)
|
||||||
- [Pattern Match On Exceptions](reason/pattern-match-on-exceptions.md)
|
- [Pattern Match On Exceptions](reason/pattern-match-on-exceptions.md)
|
||||||
|
|||||||
38
reason/is-this-a-directory-or-a-file.md
Normal file
38
reason/is-this-a-directory-or-a-file.md
Normal 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.
|
||||||
Reference in New Issue
Block a user