# MfGames.IO CIL
This a small collection of classes and extensions to make working with System.IO a little bit easier.
## Installation
At the moment, this library is not on [NuGet.org](https://nuget.org/). Instead,
it is hosted at [MyGet](https://www.myget.org/feed/Packages/mfgames).
```
dotnet add package MfGames.IO --source https://www.myget.org/F/mfgames/api/v3/index.json
```
The repository can also be added to a project by setting the `NuGet.Config` file.
```
```
## Extensions
### Assembly Extensions
#### `DirectoryInfo? GetDirectory(this Assembly? assembly)`
Gets a directory containing the assembly directory.
#### `FileInfo? GetFile(this Assembly? assembly)`
Gets a file representing the assembly's `Location` property or null.
### DirectoryInfo Extensions
#### `DirectoryInfo? CreateIfMissing(this DirectoryInfo? directory)`
Creates `directory` if it doesn't exist and `directory` is not null. This will
also create any parent directories to duplicate the `mkdir -p directory`
functionality that inspired it.
#### `DirectoryInfo? FindGitRoot(this DirectoryInfo?)`
Finds the Git root from the given directory, using `FindSelfOrParent`.
#### `DirectoryInfo? FindParent(this DirectoryInfo?, Func match)`
Finds a parent directory that returns true from the given `match`. This does not
check the given `directory`, but only parents. If none are found, this returns
null.
#### `DirectoryInfo? FindSelfOrParent(this DirectoryInfo?, Func match)`
Finds a parent directory that returns true from the given `match`. This checks
the given `directory` before going to parents. If none are found, this returns
null.
#### `DirectoryInfo GetDirectory(this DirectoryInfo directory, string[] paths)`
The equivalent of `new DirectoryInfo(Path.Combine(directory.FullName, ...paths))`.
#### `FileInfo GetFile(this DirectoryInfo directory, string[] paths)`
The equivalent of `new FileInfo(Path.Combine(directory.FullName, ...paths))`.
#### `bool IsGitRoot(this DirectoryInfo? directory)`
Returns `true` if the given directory is non-null and contains the `.git` folder.
Otherwise, returns false.
### FileInfo Extensions
#### `string ReadAllText(this FileInfo file)`
The same as `File.ReadAllText(file.GetFullPath)`.
#### `string ReadAllText(this FileInfo file, Encoding encoding)`
The same as `File.ReadAllText(file.GetFullPath, encoding)`.
#### `void WriteAllText(this FileInfo file, string text)`
The same as `File.WriteAllText(file.GetFullPath, text)`.
#### `void WriteAllText(this FileInfo file, string text, Encoding encoding)`
The same as `File.WriteAllText(file.GetFullPath, text, encoding)`.
### Type Extensions
#### `DirectoryInfo? GetDirectory(this Type? type)`
Gets a directory containing the type's assembly directory.
#### `FileInfo? GetFile(this Type? type)`
Gets a file representing the type's assembly's `Location` property or null.