diff --git a/LiamNtfs/cNtfsBase.cs b/LiamNtfs/cNtfsBase.cs index 12c63ec..0feb229 100644 --- a/LiamNtfs/cNtfsBase.cs +++ b/LiamNtfs/cNtfsBase.cs @@ -140,43 +140,67 @@ namespace LiamNtfs scanningDepth = depth; return privRequestFoldersListAsync(new DirectoryInfo(rootPath), depth); } - private List privRequestFoldersListAsync(DirectoryInfo rootPath, int depth, cNtfsResultFolder parent = null) + private List privRequestFoldersListAsync(DirectoryInfo rootPath, int depth, cNtfsResultFolder parent = null) { ResetError(); - List folders = new List(); + var folders = new List(); try { - var res = new List(); if (depth == 0) - return res; + return folders; + + DirectoryInfo[] directories; try { - foreach (var directory in rootPath.GetDirectories()) + directories = rootPath.GetDirectories(); + } + catch (Exception E) + { + cLogManager.LogEntry($"Could not enumerate directories under '{rootPath.FullName}': {E.Message}", LogLevels.Warning); + cLogManager.LogException(E, LogLevels.Debug); + return folders; + } + + foreach (var directory in directories) + { + cNtfsResultFolder folder; + try { - cNtfsResultFolder folder = new cNtfsResultFolder() + folder = new cNtfsResultFolder() { ID = generateUniquId(directory.FullName), Path = directory.FullName, CreatedDate = directory.CreationTimeUtc.ToString("s"), DisplayName = directory.Name, - Level = scanningDepth - depth+1, + Level = scanningDepth - depth + 1, Parent = parent }; + } + catch (Exception E) + { + cLogManager.LogEntry($"Could not read directory metadata for '{directory.FullName}': {E.Message}", LogLevels.Warning); + cLogManager.LogException(E, LogLevels.Debug); + continue; + } - folders.Add(folder); - if (depth > 0) - { - var result = privRequestFoldersListAsync(directory, depth - 1, folder); + folders.Add(folder); + if (depth <= 0) + continue; + + try + { + var result = privRequestFoldersListAsync(directory, depth - 1, folder); + if (result != null && result.Count > 0) folders.AddRange(result); - } + } + catch (Exception E) + { + cLogManager.LogEntry($"Could not scan subtree '{directory.FullName}': {E.Message}", LogLevels.Warning); + cLogManager.LogException(E, LogLevels.Debug); } } - catch - { - return new List(folders); - } - return new List(folders); + return folders; } catch (Exception E) {