Skip to content

Commit c6f5e87

Browse files
fix: EnumerateFiles attempt 3
1 parent de5835d commit c6f5e87

File tree

1 file changed

+33
-15
lines changed

1 file changed

+33
-15
lines changed

src/Arius.Core/Shared/FileSystem/FilePairFileSystem.cs

Lines changed: 33 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)