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