81 lines
1.9 KiB
Markdown
81 lines
1.9 KiB
Markdown
# VirtualFS
|
|
|
|
VirtualFS is a .NET library for composing multiple file-like data sources into one virtual hierarchy.
|
|
|
|
The core model is:
|
|
|
|
- every backend implements `IFileSystem`
|
|
- a `RootFileSystem` mounts many backends under virtual paths
|
|
- callers interact with virtual paths like `/assets/logo.png`
|
|
- reads and writes are dispatched to the mounted backend that owns that path
|
|
|
|
It behaves more like a small VFS layer than a thin `System.IO` wrapper.
|
|
|
|
## Status
|
|
|
|
The project currently targets:
|
|
|
|
- `netstandard2.0`
|
|
- `net472`
|
|
- `net6.0`
|
|
- `net8.0`
|
|
- `net10.0`
|
|
|
|
The test project targets `net10.0`.
|
|
|
|
## Key Rules
|
|
|
|
- paths are always rooted
|
|
- `/foo/` is a directory
|
|
- `/foo` is a file
|
|
- trailing `/` defines directory vs file
|
|
- path separator is always `/`
|
|
- mounted filesystems can overlap
|
|
- mount priority controls lookup order
|
|
|
|
## Minimal Example
|
|
|
|
```csharp
|
|
using System.IO;
|
|
using VirtualFS;
|
|
using VirtualFS.Implementation;
|
|
using VirtualFS.Memory;
|
|
using VirtualFS.Physical;
|
|
|
|
var root = new RootFileSystem();
|
|
|
|
root.Mount(new PhysicalFileSystem(new DirectoryInfo("./content")), "/");
|
|
root.Mount(new MemoryFileSystem { Priority = FileSystemMountPriority.High }, "/");
|
|
|
|
root.Root.FileCreate("runtime.txt").WriteAllText("generated at runtime");
|
|
|
|
foreach (var entry in root.Root.GetEntries())
|
|
{
|
|
Console.WriteLine($"{entry.FullPath} readonly={entry.IsReadOnly}");
|
|
}
|
|
```
|
|
|
|
## Documentation
|
|
|
|
Detailed documentation is split into the `docs/` folder:
|
|
|
|
- [Documentation Index](./docs/README.md)
|
|
- [Architecture](./docs/architecture.md)
|
|
- [Usage](./docs/usage.md)
|
|
- [Backends](./docs/backends.md)
|
|
- [Development](./docs/development.md)
|
|
|
|
## Build and Test
|
|
|
|
The repository includes a Docker-based build/test flow using the official .NET 10 SDK image.
|
|
|
|
```bash
|
|
docker build --target test -t virtualfs:test .
|
|
```
|
|
|
|
The repository CI runs the same Docker target on pushes and pull requests.
|
|
|
|
## License
|
|
|
|
The project metadata declares the MIT license.
|