private static void InnerDeleteObject(String path) { path = @"\\?\" + path; //UNC Path var objType = GetPathType(path); if (!objType.HasValue) { return; } var occupiedFiles = StringListPool.Rent(); var occupiedDirectories = StringListPool.Rent(); if (objType.Value.dwFileAttributes.HasFlag(FileAttributes.Directory)) { InnerDeleteDirectory(path, occupiedFiles, occupiedDirectories); } else { InnerDeleteFile(path, objType.Value.dwFileAttributes, occupiedFiles); DeleteOccupiedFiles(occupiedFiles); } StringListPool.Return(occupiedFiles); StringListPool.Return(occupiedDirectories); }
private static void TraverseDirectoryPower(List <String> paths, Stack <String> allPaths, List <String> occupiedFiles) { if (paths == null) { return; } Parallel.ForEach <String>(paths, item => { allPaths.Push(item); TraverseDirectoryPower(GetDirectories(item, occupiedFiles), allPaths, occupiedFiles); }); StringListPool.Return(paths); }