This commit is contained in:
duckdoom4
2023-01-18 10:57:16 +01:00
parent b8412c2556
commit 1609b9c4e4
36 changed files with 3377 additions and 226 deletions

View File

@@ -1,12 +1,16 @@
using System.IO;
using System.Collections.Generic;
using System;
using System.Linq;
namespace pkNX.Containers.VFS;
public interface IFileSystem : IDisposable
{
IEnumerable<FileSystemPath> GetEntities(FileSystemPath path);
IEnumerable<FileSystemPath> GetEntityPaths(FileSystemPath path);
IEnumerable<FileSystemPath> GetDirectoryPaths(FileSystemPath path);
IEnumerable<FileSystemPath> GetFilePaths(FileSystemPath path);
bool Exists(FileSystemPath path);
Stream CreateFile(FileSystemPath path);
Stream OpenFile(FileSystemPath path, FileAccess access);
@@ -41,4 +45,24 @@ public void WriteAllText(FileSystemPath path, string content)
public static class IFileSystemExtensions
{
public static ReadOnlyFileSystem AsReadOnlyFileSystem(this IFileSystem self) => new(self);
public static RelativeFileSystem AsRelativeFileSystem(this IFileSystem self, PathTransformation toAbsolutePath, PathTransformation toRelativePath)
{
return new(self, toAbsolutePath, toRelativePath);
}
public static IEnumerable<IFileSystemEntity> GetEntities(this IFileSystem self, FileSystemPath path)
{
return self.GetEntityPaths(path).Select(p => IFileSystemEntity.Create(self, p));
}
public static IEnumerable<VirtualDirectory> GetDirectories(this IFileSystem self, FileSystemPath path)
{
return self.GetDirectoryPaths(path).Select(p => VirtualDirectory.Create(self, p));
}
public static IEnumerable<VirtualFile> GetFiles(this IFileSystem self, FileSystemPath path)
{
return self.GetFilePaths(path).Select(p => VirtualFile.Create(self, p));
}
}