Skip to content
/ zio Public

A cross-platform abstract/virtual filesystem framework with many built-ins filesystems for .NET


Notifications You must be signed in to change notification settings


Folders and files

Last commit message
Last commit date

Latest commit


Repository files navigation

Zio ci Coverage Status NuGet

Zio provides a simple, powerful, cross-platform filesystem abstraction for .NET with many built-ins filesystems.


  • Compatible with .NET 4.6+, netstandard2.0, netstandard2.1 and net7.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
  • Supports for filesystem watcher through the IFileSystem.Watch method and the IFileSystemWatcher interface
    • For all builtin filesystems (aggregates, memory...etc.)
  • All paths are normalized through a lightweight uniform path struct UPath
  • Multiple built-ins filesystems:
    • PhysicalFileSystem to 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/Windows equivalent to C:\Windows)
    • MemoryFileSystem to 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.Write and FileShare.ReadWrite
      • Internally support for filesystem atomic operations (File.Replace)
    • ZipArchiveFileSystem to access zip archives:
      • This filesystem is a wrapper around the ZipArchive class
      • It can work in case sensitive and case insensitive mode
      • Support for FileShare.Read with ZipArchiveMode.Read
    • On top of these final filesystem, you can compose more complex filesystems:
      • AggregateFileSystem providing a read-only filesystem aggregating multiple filesystem that offers a merged view
      • MountFileSystem to mount different filesystems at a specific mount point name
      • SubFileSystem to view a sub-folder of another filesystem as if it was a root / directory
      • ReadOnlyFileSystem to interact safely with another filesystem in read-only mode
  • Higher level API similar to FileSystemEntry, FileEntry and DirectoryEntry offering a similar API to their respective FileSystemInfo, 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: NuGet


In order to build Zio, you need to install Visual Studio 2022 with latest .NET 7.0


This software is released under the BSD-Clause 2 license.


The logo is File by jeff from the Noun Project


Alexandre MUTEL aka xoofx