-
Notifications
You must be signed in to change notification settings - Fork 28
Expand file tree
/
Copy pathIVirtualDirectory.cs
More file actions
138 lines (123 loc) · 4.72 KB
/
IVirtualDirectory.cs
File metadata and controls
138 lines (123 loc) · 4.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using ManagedCode.Storage.VirtualFileSystem.Options;
namespace ManagedCode.Storage.VirtualFileSystem.Core;
/// <summary>
/// Represents a directory in the virtual filesystem
/// </summary>
public interface IVirtualDirectory : IVfsEntry
{
/// <summary>
/// Lists files in this directory with pagination and pattern matching
/// </summary>
/// <param name="pattern">Search pattern for filtering</param>
/// <param name="recursive">Whether to search recursively</param>
/// <param name="pageSize">Page size for pagination</param>
/// <param name="cancellationToken">Cancellation token</param>
/// <returns>Async enumerable of files</returns>
IAsyncEnumerable<IVirtualFile> GetFilesAsync(
SearchPattern? pattern = null,
bool recursive = false,
int pageSize = 100,
CancellationToken cancellationToken = default);
/// <summary>
/// Lists subdirectories with pagination
/// </summary>
/// <param name="pattern">Search pattern for filtering</param>
/// <param name="recursive">Whether to search recursively</param>
/// <param name="pageSize">Page size for pagination</param>
/// <param name="cancellationToken">Cancellation token</param>
/// <returns>Async enumerable of directories</returns>
IAsyncEnumerable<IVirtualDirectory> GetDirectoriesAsync(
SearchPattern? pattern = null,
bool recursive = false,
int pageSize = 100,
CancellationToken cancellationToken = default);
/// <summary>
/// Lists all entries (files and directories) in this directory
/// </summary>
/// <param name="pattern">Search pattern for filtering</param>
/// <param name="recursive">Whether to search recursively</param>
/// <param name="pageSize">Page size for pagination</param>
/// <param name="cancellationToken">Cancellation token</param>
/// <returns>Async enumerable of entries</returns>
IAsyncEnumerable<IVfsEntry> GetEntriesAsync(
SearchPattern? pattern = null,
bool recursive = false,
int pageSize = 100,
CancellationToken cancellationToken = default);
/// <summary>
/// Creates a file in this directory
/// </summary>
/// <param name="name">File name</param>
/// <param name="options">File creation options</param>
/// <param name="cancellationToken">Cancellation token</param>
/// <returns>The created file</returns>
ValueTask<IVirtualFile> CreateFileAsync(
string name,
CreateFileOptions? options = null,
CancellationToken cancellationToken = default);
/// <summary>
/// Creates a subdirectory
/// </summary>
/// <param name="name">Directory name</param>
/// <param name="cancellationToken">Cancellation token</param>
/// <returns>The created directory</returns>
ValueTask<IVirtualDirectory> CreateDirectoryAsync(
string name,
CancellationToken cancellationToken = default);
/// <summary>
/// Gets statistics for this directory
/// </summary>
/// <param name="recursive">Whether to calculate recursively</param>
/// <param name="cancellationToken">Cancellation token</param>
/// <returns>Directory statistics</returns>
Task<DirectoryStats> GetStatsAsync(
bool recursive = true,
CancellationToken cancellationToken = default);
/// <summary>
/// Deletes this directory
/// </summary>
/// <param name="recursive">Whether to delete recursively</param>
/// <param name="cancellationToken">Cancellation token</param>
/// <returns>Delete operation result</returns>
Task<DeleteDirectoryResult> DeleteAsync(
bool recursive = false,
CancellationToken cancellationToken = default);
}
/// <summary>
/// Statistics for a directory
/// </summary>
public class DirectoryStats
{
/// <summary>
/// Number of files in the directory
/// </summary>
public int FileCount { get; init; }
/// <summary>
/// Number of subdirectories
/// </summary>
public int DirectoryCount { get; init; }
/// <summary>
/// Total size of all files in bytes
/// </summary>
public long TotalSize { get; init; }
/// <summary>
/// File count by extension
/// </summary>
public Dictionary<string, int> FilesByExtension { get; init; } = new();
/// <summary>
/// The largest file in the directory
/// </summary>
public IVirtualFile? LargestFile { get; init; }
/// <summary>
/// Oldest modification date
/// </summary>
public DateTimeOffset? OldestModified { get; init; }
/// <summary>
/// Newest modification date
/// </summary>
public DateTimeOffset? NewestModified { get; init; }
}