Custom file system
The FileSystem class allows to create custom file system by passing instance of class implemented IFileSystemReadOperations or IFileSystemOperations operations.
Example implementation:
var fileSystem = new FileSystem(new CustomFileSystemOperations());
internal class CustomFileSystemOperations : IFileSystemOperations, IFileSystemHistoryOperations{ // Implementation}File system operations interfaces
Section titled “File system operations interfaces”All operations interfaces are optional except IFileSystemOperations - implement only the ones relevant to what your storage supports; FileSystem checks at runtime which interfaces an operations object implements and reports NotSupportedException for missing capabilities.
| Interface | Description |
|---|---|
IFileSystemOperations | The base interface every operations class must implement. Exposes Kind and Name of the file system. |
IFileSystemReadOperations | Provides methods for reading files / directories, e.g. ReadFile, GetLinkInfo, GetLinks. |
IFileSystemWriteOperations | Provides methods for writing, moving or deleting files; create, move or delete directories and update metadata files / directories. |
IFileSystemDirectReadWriteOperations | Provides OpenFileStream for opening a file directly as a read/write/read-write Stream, instead of going through ReadFile/WriteFile. |
IFileSystemCustomPathOperations | Lets a file system provide its own DirectorySeparator and normalize/correct paths via CorrectPath. |
IFileSystemFeatureSupport | Declares optional features through FileSystemOperationsFeatures - which metadata the storage keeps (HiddenAttribute, ReadOnlyAttribute, LastWriteTimeAttributes), whether it accepts ConcurrentWriteOperations, and whether directories are real objects (HierarchicalDirectories). Operations that do not implement this interface support no optional feature. What a consumer sees is described in provider capabilities. |
IFileSystemPermissionsOperations | Provides methods HasReadAccess and HasWriteAccess for checking files permissions. |
IFileSystemWatchOperations | Provides methods CreateFileWatcher and CreateDirectoryWatcher to watch files/directories changes, see change notifications and watching. |
IFileSystemHistoryOperations | Provides files/directories history methods e.g. ReadFileVersion, DeleteFileVersion, GetFileVersionInfo, GetFileVersions, see file history and versioning. |
IFileSystemAsyncReadOperations | Provides asynchronous equivalents of IFileSystemReadOperations methods. |
IFileSystemAsyncWriteOperations | Provides asynchronous equivalents of IFileSystemWriteOperations methods. |
IFileSystemAsyncDirectReadWriteOperations | Provides an asynchronous equivalent of IFileSystemDirectReadWriteOperations (OpenFileStreamAsync). |
IFileSystemAsyncHistoryOperations | Provides asynchronous equivalents of IFileSystemHistoryOperations methods. |
Built-in async-to-sync and sync-to-async wrappers (in
TagBites.IO.Operations.Wrappers) let a file system that only implements the synchronous (or only the asynchronous) interfaces be used through the other API as well.