Go to file
Mike Nolan 1818aa12dc Hopefully fix UnixPath.Path being null 2024-07-22 19:11:13 -05:00
Tesses.VirtualFilesystem Fix it some more 2023-09-06 20:39:08 -05:00
Tesses.VirtualFilesystem.Base Hopefully fix UnixPath.Path being null 2024-07-22 19:11:13 -05:00
Tesses.VirtualFilesystem.DiscUtils Added Storage access framework, DiscUtils More of Zio, Fixed Dispose and internal function UnixPath.SetPath 2024-07-22 18:44:49 -05:00
Tesses.VirtualFilesystem.Example Initial Commit 2022-12-14 09:53:42 -06:00
Tesses.VirtualFilesystem.Extensions Initial Commit 2022-12-14 09:53:42 -06:00
Tesses.VirtualFilesystem.Local Added Storage access framework, DiscUtils More of Zio, Fixed Dispose and internal function UnixPath.SetPath 2024-07-22 18:44:49 -05:00
Tesses.VirtualFilesystem.Saf Added Storage access framework, DiscUtils More of Zio, Fixed Dispose and internal function UnixPath.SetPath 2024-07-22 18:44:49 -05:00
Tesses.VirtualFilesystem.Zio Hopefully fix UnixPath.Path being null 2024-07-22 19:11:13 -05:00
.gitignore Initial Commit 2022-12-14 09:53:42 -06:00
LICENSE.md Initial Commit 2022-12-14 09:53:42 -06:00
README.md Initial Commit 2022-12-14 09:53:42 -06:00
Tesses.VFS.sln Added Storage access framework, DiscUtils More of Zio, Fixed Dispose and internal function UnixPath.SetPath 2024-07-22 18:44:49 -05:00

README.md

Tesses.VirtualFilesystem

A library for virtual filesystems in .NET

Nuget

Tesses.VirtualFilesystem.Base

Downloads Version

Tesses.VirtualFilesystem

Downloads Version

Tesses.VirtualFilesystem.Local

Downloads Version

Tesses.VirtualFilesystem.Zio

Downloads Version

Tesses.VirtualFilesystem.Extensions

Downloads Version

License

GPL3-only Licensed under GPL3

How to use (way 1 uses LocalFileSystem)

using Tesses.VirtualFilesystem;
using Tesses.VirtualFilesystem.Filesystems;
using Tesses.VirtualFilesystem.Extensions;

LocalFileSystem fileSystem = new LocalFileSystem();
//Special.Home is $HOME on linux (usually /home/username) or %UserProfile% on Windows (usually C:\Users\username)
foreach(var item in fileSystem.EnumerateDirectories(Special.Home))
{
    Console.WriteLine(item.Name); //this is name
    //Console.WriteLine(item.Path) //this is entire path
}
fileSystem.WriteAllText(Special.CurDir / "file.txt","Some Text"); //write to file in current directory
fileSystem.CreateDirectory(Special.CurDir / "dir1/dir2/dir3" / "dir4"); //shows how you can use normal paths too within special ones

//enumerates directories in linux home dir (not cross platform) 
foreach(var item in fileSystem.EnumerateDirectories("/home")) 
{
    Console.WriteLine(item.Name);
}

fileSystem.CreateSymlink("fileToLinkTo","symlinkFile");
fileSystem.ReadSymlink("symlinkFile"); //should be equal to Special.CurDir / "fileToLinkTo" in this instance

fileSystem.CreateHardlink("originalFileName","newFileName"); //for people who dont know what hardlinks are, a simple explanation is a hard link is giving a file another name (not copying) and can only be done to files and on same real filesystem

fileSystem.DirectoryExists(Special.Home); //should be true if directory exists

How to use (way 2 uses LocalFileSystem)

using Tesses.VirtualFilesystem;
using Tesses.VirtualFilesystem.Filesystems;
using Tesses.VirtualFilesystem.Extensions;

var res=fileSystem.OpenDirectory(Special.Home);
foreach(var item in res)
{
    if(item.IsDirectoryPointer)
    {
        var dir=item.AsDirectoryPointer();
        //dir.EnumerateDirectories(); //enumerate directories IEnumerable<DirectoryPointer>
        Console.WriteLine($"DIR: {item.Name}");
    }
    if(item.IsFilePointer)
    {
        var file=item.AsFilePointer();
        //file.Delete(); //deletes file
        Console.WriteLine($"FILE: {item.Name}");
    }
    if(item.IsSymlinkPointer)
    {
        var link = item.AsSymlinkPointer();
        //do something with symlink
        //link.Target = Special.Music; //sets link to Music folder
        Console.WriteLine($"LINK: {item.Name}");
    }
}

How to implement

Inherit from SyncFileSystem or AsyncFileSystem

Look in the source for Tesses.VirtualFilesystem.Local for help with SyncFileSystem (I might add documentation for this later)