@@ -7,7 +7,8 @@ namespace BionicCode.Utilities.Net.Standard.IO
7
7
{
8
8
public class FilePathFilter : IFilePathFilter
9
9
{
10
- public IEnumerable < string > FilterFilePathsFromFolder (
10
+ /// <inheritdoc />
11
+ public IEnumerable < FileInfo > EnumerateFilesInFolder (
11
12
string folderPath ,
12
13
FileExtensions fileExtensionsToCollect ,
13
14
bool isIncludingSubdirectories )
@@ -33,141 +34,95 @@ public IEnumerable<string> FilterFilePathsFromFolder(
33
34
currentDirectorySearchOption ) ;
34
35
}
35
36
36
- protected IEnumerable < string > CollectFilePathsFromFolderByFileExtension (
37
+ protected IEnumerable < FileInfo > CollectFilePathsFromFolderByFileExtension (
37
38
string folderPath ,
38
39
FileExtensions fileExtensionsToCollect ,
39
40
SearchOption directorySearchOption )
40
41
{
41
42
if ( ! Directory . Exists ( folderPath ) )
42
43
{
43
- return new List < string > ( ) ;
44
+ yield break ;
44
45
}
45
46
46
47
var directoryInfo = new DirectoryInfo ( folderPath ) ;
47
- var fileInfoCollection = new List < FileInfo > ( ) ;
48
48
49
- List < string > extensionsToCollect = fileExtensionsToCollect . ToString ( ) . Split ( ',' ) . ToList ( ) ;
49
+ IEnumerable < string > extensionsToCollect = fileExtensionsToCollect . ToString ( ) . Split ( ',' ) ;
50
50
foreach ( string fileExtension in extensionsToCollect )
51
51
{
52
- fileInfoCollection . AddRange ( directoryInfo . GetFiles ( "*." + fileExtension , directorySearchOption ) ) ;
52
+ foreach ( FileInfo fileInfo in directoryInfo . EnumerateFiles ( "*." + fileExtension , directorySearchOption ) )
53
+ {
54
+ yield return fileInfo ;
55
+ }
53
56
}
54
-
55
- return ( from fileInfo in fileInfoCollection select fileInfo . FullName ) . ToList ( ) ;
56
57
}
57
58
58
- protected IEnumerable < string > CollectAllFilePathsIgnoreFileExtension (
59
+ protected IEnumerable < FileInfo > CollectAllFilePathsIgnoreFileExtension (
59
60
string folderPath ,
60
61
SearchOption directorySearchOption )
61
62
{
62
63
if ( ! Directory . Exists ( folderPath ) )
63
64
{
64
- return new List < string > ( ) ;
65
+ return new List < FileInfo > ( ) ;
65
66
}
66
67
67
68
var directoryInfo = new DirectoryInfo ( folderPath ) ;
68
- List < FileInfo > fileInfoCollection =
69
- directoryInfo . GetFiles ( "*" , directorySearchOption ) . Where ( fileInfo => fileInfo . Exists ) . ToList ( ) ;
70
- return ( from fileInfo in fileInfoCollection select fileInfo . FullName ) . ToList ( ) ;
69
+ return
70
+ directoryInfo . EnumerateFiles ( "*" , directorySearchOption ) ;
71
71
}
72
72
73
- /// <summary>
74
- /// Extracts valid paths or paths with a specified extension from a collection of paths.
75
- /// The path collection can be a mix-up of files and folders. In case the path describes a folder, the extension filter
76
- /// will be applied to all containing files.
77
- /// </summary>
78
- /// <param name="pathEntries">A string collection holding folder and/ or file paths filter.</param>
79
- /// <param name="fileExtensionsToCollect">
80
- /// A flagged Enum type that defines one or more extensions to filter from the
81
- /// collection. <see cref="FileExtensions" />
82
- /// </param>
83
- /// <param name="isIncludingSubdirectories">
84
- /// Sets the filter whether to apply to sub directories or not.
85
- /// <c>True</c> includes subdirectories and <c>False</c> ignores them.
86
- /// If value is passed the parameter defaults to <c>Tue</c>.
87
- /// </param>
88
- /// <returns>IEnumerable</returns>
89
- /// <remarks>
90
- /// To ignore file extensions and collect all files found specify the <c>any</c> file extension.
91
- /// <see cref="FileExtensions" />
92
- /// </remarks>
93
- public IEnumerable < string > FilterFilePathsFromMixedPathsIncludingFolders (
73
+ /// <inheritdoc />
74
+ public IEnumerable < FileInfo > EnumerateFilesIncludingFolders (
94
75
IEnumerable < string > pathEntries ,
95
76
FileExtensions fileExtensionsToCollect ,
96
- bool isIncludingSubdirectories )
77
+ bool isIncludingSubdirectories = false )
97
78
{
98
- var filePathCollection = new List < string > ( ) ;
99
79
foreach ( string path in pathEntries )
100
80
{
101
81
if ( Directory . Exists ( path ) )
102
82
{
103
- filePathCollection . AddRange (
104
- CollectFilePathsFromFolderByFileExtension (
105
- path ,
106
- fileExtensionsToCollect ,
107
- isIncludingSubdirectories ? SearchOption . AllDirectories : SearchOption . TopDirectoryOnly ) ) ;
83
+ foreach ( FileInfo fileInfo in CollectFilePathsFromFolderByFileExtension (
84
+ path ,
85
+ fileExtensionsToCollect ,
86
+ isIncludingSubdirectories ? SearchOption . AllDirectories : SearchOption . TopDirectoryOnly ) )
87
+ {
88
+ yield return fileInfo ;
89
+ }
108
90
}
109
91
else if ( File . Exists ( path ) )
110
92
{
111
93
var fileInfo = new FileInfo ( path ) ;
112
- FileExtensions foundFileExtension ;
113
- if ( Enum . TryParse ( fileInfo . Extension . Substring ( 1 ) , true , out foundFileExtension ) &&
94
+ if ( Enum . TryParse ( fileInfo . Extension . Substring ( 1 ) , true , out FileExtensions foundFileExtension ) &&
114
95
fileExtensionsToCollect . HasFlag ( foundFileExtension ) )
115
96
{
116
- filePathCollection . Add ( path ) ;
97
+ yield return fileInfo ;
117
98
}
118
99
}
119
100
}
120
-
121
- return filePathCollection ;
122
101
}
123
102
124
- /// <summary>
125
- /// Extracts valid paths or paths with a specified extension from a collection of paths.
126
- /// The path collection can be a mix-up of files and folders. In case the path describes a folder, the filter will ignore
127
- /// it including all containing files.
128
- /// </summary>
129
- /// <param name="pathEntries">A string collection holding folder and/ or file paths filter.</param>
130
- /// <param name="fileExtensionsToCollect">
131
- /// A flagged Enum type that defines one or more extensions to filter from the
132
- /// collection. <see cref="FileExtensions" />
133
- /// </param>
134
- /// <returns>IEnumerable</returns>
135
- /// <remarks>
136
- /// To ignore file extensions and collect all files found specify the <c>any</c> file extension.
137
- /// <see cref="FileExtensions" />
138
- /// </remarks>
139
- public IEnumerable < string > FilterFilePathsFromMixedPathsIgnoringFolders (
103
+ /// <inheritdoc />
104
+ public IEnumerable < FileInfo > EnumerateFilesIgnoringFolders (
140
105
IEnumerable < string > pathEntries ,
141
106
FileExtensions fileExtensionsToCollect )
142
107
{
143
- var filePathCollection = new List < string > ( ) ;
144
108
foreach ( string path in pathEntries )
145
109
{
146
110
if ( Directory . Exists ( path ) )
147
111
{
148
112
continue ;
149
113
}
150
114
151
- if ( File . Exists ( path ) )
115
+ if ( ! File . Exists ( path ) )
152
116
{
153
- FilePathFilter . CollectFilePaths ( fileExtensionsToCollect , path , filePathCollection ) ;
117
+ continue ;
154
118
}
155
- }
156
-
157
- return filePathCollection ;
158
- }
159
119
160
- private static void CollectFilePaths (
161
- FileExtensions fileExtensionsToCollect ,
162
- string path ,
163
- List < string > filePathCollection )
164
- {
165
- var fileInfo = new FileInfo ( path ) ;
166
- FileExtensions currentFileExtension ;
167
- if ( Enum . TryParse ( fileInfo . Extension , true , out currentFileExtension ) &&
168
- fileExtensionsToCollect . HasFlag ( currentFileExtension ) )
169
- {
170
- filePathCollection . Add ( path ) ;
120
+ var fileInfo = new FileInfo ( path ) ;
121
+ if ( Enum . TryParse ( fileInfo . Extension , true , out FileExtensions currentFileExtension ) &&
122
+ fileExtensionsToCollect . HasFlag ( currentFileExtension ) )
123
+ {
124
+ yield return fileInfo ;
125
+ }
171
126
}
172
127
}
173
128
}
0 commit comments