// ****************************************************************************** /// <summary> /// Returns a fully populate heirarchy for this forlder /// </summary> /// <param name="directoryInfo">Object representing the root folder to scan</param> /// <returns>Populated Heirarchy</returns> // ****************************************************************************** CosmosDirItem ScanFolder(IDirectoryInfo directoryInfo, CancellationToken cancelToken) { CurrentItemLabel = directoryInfo.FullName; CosmosDirectoryInfo cosmosDirectoryInfo = (CosmosDirectoryInfo)directoryInfo; CosmosDirItem thisDir = new CosmosDirItem(directoryInfo.Name, directoryInfo.FullName); //thisDir.TotalValue = Math.Max(0, cosmosDirectoryInfo.CosmosSize); if (cancelToken.IsCancellationRequested) { return(thisDir); } double totalFolderSize = 0; try { // Total up the size of the content foreach (var file in directoryInfo.GetFiles()) { thisDir.AddContent(file.Name, file); var fileSize = Math.Max(0, file.GetValue(CosmosDirectoryInfo.STREAMSIZE)); UnitsScannedSoFar += fileSize; totalFolderSize += fileSize; file.SetValue(CosmosDirectoryInfo.STREAMSIZE, fileSize); if (cancelToken.IsCancellationRequested) { return(thisDir); } } // recurse into the child directories foreach (IDirectoryInfo dir in directoryInfo.GetDirectories()) { CosmosDirItem newDir = ScanFolder(dir, cancelToken); thisDir.AddChild(newDir); } } catch (UnauthorizedAccessException) { } // Ignore permissions problems catch (Exception e) { #if DEBUG Debugger.Break(); #endif Debug.WriteLine("Error: " + e.Message); } //thisDir.TotalValue = totalFolderSize; return(thisDir); }
// ****************************************************************************** /// <summary> /// Replacement for DirectoryInfo.GetDirectories() /// </summary> /// <returns>Array of ISliceDirectoryInfo objects</returns> // ****************************************************************************** public IDirectoryInfo[] GetDirectories() { if (!scanned) { ScanDirectory(FullName, out files, out directories); } CosmosDirectoryInfo[] array = new CosmosDirectoryInfo[directories.Count]; for (int i = 0; i < directories.Count; i++) { array[i] = new CosmosDirectoryInfo(directories[i].FullName, directories[i].GetValue(STREAMSIZE)); } return(array); }