Zio provides a simple, powerful, cross-platform filesystem abstraction for .NET with many built-ins filesystems.
- Compatible with .NET 4.0,4.5+and the cross platform.NET Core/Standard 1.3+
- API providing all operations provided by the regular System.IO API (e.g File.Move, Directory.Delete... etc.)
- Allowing atomic filesystem operations (e.g File.Replace...)
 
- A simple interface abstraction IFileSystem
- Supports for filesystem watcher through the IFileSystem.Watchmethod and theIFileSystemWatcherinterface- For all builtin filesystems (aggregates, memory...etc.)
 
- All paths are normalized through a lightweight uniform path struct UPath
- Multiple built-ins filesystems:
- PhysicalFileSystemto access the physical disks, directories and folders.- With uniform paths, this filesystem on Windows is working like on a Windows Subsystem Linux (WSL), by remapping drives to mount directory (e.g path /mnt/c/Windowsequivalent toC:\Windows)
 
- With uniform paths, this filesystem on Windows is working like on a Windows Subsystem Linux (WSL), by remapping drives to mount directory (e.g path 
- MemoryFileSystemto access a filesystem in memory:- Trying to be 100% compatible with a true PhysicalFileSystem(including exceptions)
- Efficient concurrency with a per node (file or directory) locking mechanism
- A safe hierarchical locking strategy (following Unix kernel recommendations for directory locking)
- Support for FileShare.Read,FileShare.WriteandFileShare.ReadWrite
- Internally support for filesystem atomic operations (File.Replace)
 
- Trying to be 100% compatible with a true 
- On top of these final filesystem, you can compose more complex filesystems:
- AggregateFileSystemproviding a read-only filesystem aggregating multiple filesystem that offers a merged view
- MountFileSystemto mount different filesystems at a specific mount point name
- SubFileSystemto view a sub-folder of another filesystem as if it was a root- /directory
- ReadOnlyFileSystemto interact safely with another filesystem in read-only mode
 
 
- Higher level API similar to FileSystemEntry,FileEntryandDirectoryEntryoffering a similar API to their respectiveFileSystemInfo,FileInfo,DirectoryInfo
Accessing a physical filesystem:
var fs = new PhysicalFileSystem();
foreach(var dir in fs.EnumerateDirectories("/mnt/c"))
{
    // ...
}Using an in-memory filesystem:
var fs = new MemoryFileSystem();
fs.WriteAllText("/temp.txt", "This is a content");
if (fs.FileExists("/temp.txt"))
{
    Console.WriteLine("The content of the file:" + fs.ReadAllText("/temp.txt"))
}The following documentation provides more information about the API and how to use it.
The documentation is directly available as part of this repository in the /doc folder.
Zio is available as a NuGet package: 
In order to build Zio, you need to install Visual Studio 2017 with latest .NET Core
- Add support for ZipArchive (readonly, readwrite)
- Add support for Git FileSystem (readonly)
This software is released under the BSD-Clause 2 license.
The logo is File by jeff from the Noun Project
Alexandre MUTEL aka xoofx