Log and continue on NTFS subtree access errors
This commit is contained in:
@@ -140,43 +140,67 @@ namespace LiamNtfs
|
||||
scanningDepth = depth;
|
||||
return privRequestFoldersListAsync(new DirectoryInfo(rootPath), depth);
|
||||
}
|
||||
private List<cNtfsResultBase> privRequestFoldersListAsync(DirectoryInfo rootPath, int depth, cNtfsResultFolder parent = null)
|
||||
private List<cNtfsResultBase> privRequestFoldersListAsync(DirectoryInfo rootPath, int depth, cNtfsResultFolder parent = null)
|
||||
{
|
||||
ResetError();
|
||||
List<cNtfsResultBase> folders = new List<cNtfsResultBase>();
|
||||
var folders = new List<cNtfsResultBase>();
|
||||
try
|
||||
{
|
||||
var res = new List<cNtfsResultBase>();
|
||||
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<cNtfsResultBase>(folders);
|
||||
}
|
||||
|
||||
return new List<cNtfsResultBase>(folders);
|
||||
return folders;
|
||||
}
|
||||
catch (Exception E)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user