Zio provides a simple, powerful, cross-platform filesystem abstraction for .NET with many built-ins filesystems.
- Compatible with
netstandard2.0,netstandard2.1andnet8.0+ - 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 net10.0async APIs via generated*Asyncfile-system types andIAsyncEnumerable<T>enumeration/search helpers- 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
ZipArchiveFileSystemto access zip archives:- This filesystem is a wrapper around the
ZipArchiveclass - It can work in case sensitive and case insensitive mode
- Support for
FileShare.ReadwithZipArchiveMode.Read
- This filesystem is a wrapper around the
- On top of these final filesystem, you can compose more complex filesystems:
AggregateFileSystemproviding a read-only filesystem aggregating multiple filesystem that offers a merged viewMountFileSystemto mount different filesystems at a specific mount point nameSubFileSystemto view a sub-folder of another filesystem as if it was a root/directoryReadOnlyFileSystemto 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"))
}Async APIs are available when targeting net10.0 through generated async file-system types such as MemoryFileSystemAsync. The following documentation provides more information about the API, generated async path, 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 2022 with the latest .NET 10 SDK so the net10.0 async target can compile.
This software is released under the BSD-Clause 2 license.
The logo is File by jeff from the Noun Project
Alexandre MUTEL aka xoofx
