Ave.Extensions.FileSystem.MimeDetective
0.2.0-preview.1
See the version list below for details.
dotnet add package Ave.Extensions.FileSystem.MimeDetective --version 0.2.0-preview.1
NuGet\Install-Package Ave.Extensions.FileSystem.MimeDetective -Version 0.2.0-preview.1
<PackageReference Include="Ave.Extensions.FileSystem.MimeDetective" Version="0.2.0-preview.1" />
<PackageVersion Include="Ave.Extensions.FileSystem.MimeDetective" Version="0.2.0-preview.1" />
<PackageReference Include="Ave.Extensions.FileSystem.MimeDetective" />
paket add Ave.Extensions.FileSystem.MimeDetective --version 0.2.0-preview.1
#r "nuget: Ave.Extensions.FileSystem.MimeDetective, 0.2.0-preview.1"
#addin nuget:?package=Ave.Extensions.FileSystem.MimeDetective&version=0.2.0-preview.1&prerelease
#tool nuget:?package=Ave.Extensions.FileSystem.MimeDetective&version=0.2.0-preview.1&prerelease
Ave.Extensions.FileSystem
Cross-platform filesystem operations for .NET applications with advanced path mapping and security features.
Features
- Cross-platform file system operations - Consistent API across Windows, Linux, and macOS
- Canonical path mapping - Use Unix-style paths (
/mnt/c/folder/file.txt
) on all platforms - Path security validation - Restrict file access to allowed directories with wildcard support
- Functional error handling - Uses
Result<T, Error>
pattern instead of exceptions - Async enumeration - Stream large directory listings efficiently
- File system monitoring - Real-time change notifications with reactive streams
- Dependency injection ready - Full integration with Microsoft.Extensions.DependencyInjection
- NetStandard 2.1 compatible - Works with .NET Core 3.0+ and .NET 5+
Packages
Package | Description |
---|---|
Ave.Extensions.FileSystem.Abstractions |
Interfaces and abstractions for file system operations |
Ave.Extensions.FileSystem |
Core implementation with path mapping and security features |
Ave.Extensions.FileSystem.DependencyInjection |
Dependency injection extensions and configuration |
Getting Started
Install the packages from NuGet:
dotnet add package Ave.Extensions.FileSystem
dotnet add package Ave.Extensions.FileSystem.DependencyInjection
Basic Usage
using Ave.Extensions.FileSystem;
using Microsoft.Extensions.DependencyInjection;
// Setup with DI
services.AddFileSystem();
// Usage
public class MyService
{
private readonly IFileSystem _fileSystem;
public MyService(IFileSystem fileSystem)
{
_fileSystem = fileSystem;
}
public async Task ProcessFile(string path)
{
var result = await _fileSystem.FileExistsAsync(path);
if (result.IsSuccess && result.Value)
{
var contentResult = await _fileSystem.ReadAllTextAsync(path);
if (contentResult.IsSuccess)
{
var content = contentResult.Value;
// Process content...
}
}
}
}
Canonical Path Mapping
Use Unix-style paths across all platforms:
// Setup with canonical path mapping
services.AddFileSystem(options =>
{
options.UseCanonicalPaths = true;
});
// Now you can use Unix-style paths on Windows
var result = await fileSystem.ReadAllTextAsync("/mnt/c/users/documents/file.txt");
// Automatically maps to C:\users\documents\file.txt on Windows
Path Security
Restrict file system access to specific directories:
services.AddFileSystem(options =>
{
options.EnablePathSecurity = true;
options.AllowedPaths.Add("/app/data");
options.AllowedPaths.Add("/tmp/*");
options.AllowedPaths.Add("/logs");
});
// Only paths under /app/data, /tmp/*, and /logs are accessible
Advanced Configuration
services.AddFileSystem(options =>
{
// Enable canonical path mapping
options.UseCanonicalPaths = true;
// Enable security validation
options.EnablePathSecurity = true;
options.AllowedPaths.Add("/app/**");
options.AllowedPaths.Add("/data/uploads/*");
// Customize other features
options.EnableMonitoring = true;
options.DefaultBufferSize = 8192;
});
Path Mapping Reference
When canonical path mapping is enabled, the library automatically converts between platform-specific and Unix-style paths:
Windows Path Mapping
Canonical Path | Windows System Path | Description |
---|---|---|
/mnt/c/folder/file.txt |
C:\folder\file.txt |
Primary drive mapping (WSL-style) |
/mnt/d/data/logs |
D:\data\logs |
Alternative drive |
/c/folder/file.txt |
C:\folder\file.txt |
Legacy format (still supported for input) |
//server/share/file |
\\server\share\file |
UNC paths |
Unix Path Mapping
On Unix systems (Linux/macOS), canonical paths are used directly:
Canonical Path | Unix System Path |
---|---|
/home/user/file.txt |
/home/user/file.txt |
/var/log/app.log |
/var/log/app.log |
Security Pattern Examples
Pattern | Matches | Description |
---|---|---|
/app/data |
/app/data and /app/data/subfolder/file.txt |
Exact path and subdirectories |
/tmp/* |
/tmp/file.txt but not /tmp/sub/file.txt |
Single level wildcard |
/logs/** |
All files under /logs recursively |
Recursive wildcard |
/config/*.json |
/config/app.json but not /config/sub/app.json |
File extension pattern |
Development
Building
dotnet build
Running Tests
dotnet test
Publishing a New Version
Create a new tag with the version number:
git tag v1.0.0 git push origin v1.0.0
The GitHub Actions workflow will automatically:
- Build and test the code
- Generate NuGet packages
- Create a GitHub Release
- Publish packages to NuGet.org (when configured)
License
MIT
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
.NET Core | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.1 is compatible. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.1
- Ave.Extensions.FileSystem (>= 0.2.0-preview.1)
- Ave.Extensions.FileSystem.Abstractions (>= 0.2.0-preview.1)
- Microsoft.Extensions.DependencyInjection (>= 6.0.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 6.0.0)
- Mime-Detective (>= 22.7.15)
- System.Reactive (>= 6.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last Updated |
---|---|---|
0.3.0-preview.1 | 244 | 6/10/2025 |
0.2.0-preview.1 | 169 | 6/8/2025 |