Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/xoofx/zio
A cross-platform abstract/virtual filesystem framework with many built-ins filesystems for .NET
https://github.com/xoofx/zio
dotnet dotnet-core filesystem filesystem-api vfs
Last synced: about 13 hours ago
JSON representation
A cross-platform abstract/virtual filesystem framework with many built-ins filesystems for .NET
- Host: GitHub
- URL: https://github.com/xoofx/zio
- Owner: xoofx
- License: bsd-2-clause
- Created: 2017-05-01T21:51:24.000Z (over 7 years ago)
- Default Branch: main
- Last Pushed: 2024-12-05T19:25:43.000Z (about 1 month ago)
- Last Synced: 2025-01-03T09:00:09.297Z (8 days ago)
- Topics: dotnet, dotnet-core, filesystem, filesystem-api, vfs
- Language: C#
- Homepage:
- Size: 706 KB
- Stars: 833
- Watchers: 45
- Forks: 62
- Open Issues: 18
-
Metadata Files:
- Readme: readme.md
- Changelog: changelog.md
- Funding: .github/FUNDING.yml
- License: license.txt
Awesome Lists containing this project
README
# Zio [![ci](https://github.com/xoofx/zio/actions/workflows/ci.yml/badge.svg)](https://github.com/xoofx/zio/actions/workflows/ci.yml) [![Coverage Status](https://coveralls.io/repos/github/xoofx/zio/badge.svg?branch=main)](https://coveralls.io/github/xoofx/zio?branch=main) [![NuGet](https://img.shields.io/nuget/v/Zio.svg)](https://www.nuget.org/packages/Zio/)
Zio provides a simple, powerful, cross-platform **filesystem abstraction for .NET** with many built-ins filesystems.
## Features
- 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`](https://github.com/xoofx/zio/blob/main/src/Zio/IFileSystem.cs)
- Supports for filesystem watcher through the `IFileSystem.Watch` method and the [`IFileSystemWatcher`](https://github.com/xoofx/zio/blob/main/src/Zio/IFileSystemWatcher.cs) interface
- For all builtin filesystems (aggregates, memory...etc.)
- All paths are normalized through a lightweight uniform path struct [`UPath`](https://github.com/xoofx/zio/blob/main/src/Zio/UPath.cs)
- 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](https://www.kernel.org/doc/Documentation/filesystems/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`](https://docs.microsoft.com/en-us/dotnet/api/system.io.compression.ziparchive?view=netcore-3.1) 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`## Usage
Accessing a physical filesystem:
```c#
var fs = new PhysicalFileSystem();
foreach(var dir in fs.EnumerateDirectories("/mnt/c"))
{
// ...
}
```Using an in-memory filesystem:
```c#
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.
## Documentation
The [documentation](https://github.com/xoofx/zio/tree/main/doc) is directly available as part of this repository in the `/doc` folder.
## Download
Zio is available as a NuGet package: [![NuGet](https://img.shields.io/nuget/v/Zio.svg)](https://www.nuget.org/packages/Zio/)
## Build
In order to build Zio, you need to install Visual Studio 2022 with latest [.NET 7.0](https://dotnet.microsoft.com/en-us/download/dotnet/7.0)
## License
This software is released under the [BSD-Clause 2 license](https://github.com/xoofx/zio/blob/main/license.txt).
## Credits
The logo is `File` by [jeff](https://thenounproject.com/jeff955/) from the Noun Project
## Author
Alexandre MUTEL aka [xoofx](https://xoofx.github.io)