@@ -103,31 +103,43 @@ private static IEnumerable<DirectoryEntry> EnumerateDirectories(DirectoryEntry d
103103
104104 private IEnumerable < FileEntry > EnumerateFiles ( DirectoryEntry directory , SearchOption searchOption )
105105 {
106- if ( ShouldSkipDirectory ( directory ) )
106+ // FIX: Zio throws an ArgumentException: Invalid character found \u000D at index 91 (Parameter 'path') for some reason in FileSystems.PhysicalFileSystem.EnumeratePathsImpl. Reverting to native netcore methods.
107+ var directoryInfo = new DirectoryInfo ( directory . FileSystem . ConvertPathToInternal ( directory . Path ) ) ;
108+ foreach ( var fe in EnumerateFiles ( directoryInfo , searchOption ) )
107109 {
108- logger . LogWarning ( "Skipping directory {directory} as it is hidden, system, or excluded" , directory . FullName ) ;
109- yield break ;
110+ var fileEntry = new FileEntry ( directory . FileSystem , directory . FileSystem . ConvertPathFromInternal ( fe . FullName ) ) ;
111+ yield return fileEntry ;
110112 }
111113
112- foreach ( var fe in directory . EnumerateFiles ( ) )
114+
115+ IEnumerable < FileInfo > EnumerateFiles ( DirectoryInfo directory , SearchOption searchOption )
113116 {
114- if ( ShouldSkipFile ( fe ) )
117+ if ( ShouldSkipDirectory ( directory ) )
115118 {
116- logger . LogWarning ( "Skipping file {file } as it is hidden, system, or excluded" , fe . FullName ) ;
117- continue ;
119+ logger . LogWarning ( "Skipping directory {directory } as it is hidden, system, or excluded" , directory . FullName ) ;
120+ yield break ;
118121 }
119122
120- yield return fe ;
121- }
123+ foreach ( var fi in directory . EnumerateFiles ( ) )
124+ {
125+ if ( ShouldSkipFile ( fi ) )
126+ {
127+ logger . LogWarning ( "Skipping file {file} as it is hidden, system, or excluded" , fi . FullName ) ;
128+ continue ;
129+ }
122130
123- // Only recurse into subdirectories if AllDirectories is specified
124- if ( searchOption == SearchOption . AllDirectories )
125- {
126- foreach ( var subDir in directory . EnumerateDirectories ( ) )
131+ yield return fi ;
132+ }
133+
134+ // Only recurse into subdirectories if AllDirectories is specified
135+ if ( searchOption == SearchOption . AllDirectories )
127136 {
128- foreach ( var file in EnumerateFiles ( subDir , searchOption ) )
137+ foreach ( var subDir in directory . EnumerateDirectories ( ) )
129138 {
130- yield return file ;
139+ foreach ( var file in EnumerateFiles ( subDir , searchOption ) )
140+ {
141+ yield return file ;
142+ }
131143 }
132144 }
133145 }
@@ -136,10 +148,16 @@ private IEnumerable<FileEntry> EnumerateFiles(DirectoryEntry directory, SearchOp
136148 static bool ShouldSkipDirectory ( DirectoryEntry dir ) =>
137149 ( dir . Attributes & ( /*FileAttributes.Hidden | */ FileAttributes . System ) ) != 0 ||
138150 ExcludedDirectories . Contains ( dir . Name ) ;
151+ static bool ShouldSkipDirectory ( DirectoryInfo dir ) =>
152+ ( dir . Attributes & ( /*FileAttributes.Hidden | */ FileAttributes . System ) ) != 0 ||
153+ ExcludedDirectories . Contains ( dir . Name ) ;
139154
140155 static bool ShouldSkipFile ( FileEntry file ) =>
141156 ( file . Attributes & ( /*FileAttributes.Hidden | */ FileAttributes . System ) ) != 0 ||
142157 ExcludedFiles . Contains ( Path . GetFileName ( file . FullName ) ) ;
158+ static bool ShouldSkipFile ( FileInfo file ) =>
159+ ( file . Attributes & ( /*FileAttributes.Hidden | */ FileAttributes . System ) ) != 0 ||
160+ ExcludedFiles . Contains ( file . Name ) ;
143161
144162 private static readonly HashSet < string > ExcludedDirectories = new ( StringComparer . OrdinalIgnoreCase ) { "@eaDir" , "eaDir" , "SynoResource" } ;
145163 private static readonly HashSet < string > ExcludedFiles = new ( StringComparer . OrdinalIgnoreCase ) { "autorun.ini" , "thumbs.db" , ".ds_store" } ;
0 commit comments