Beispiel #1
0
        private FolderSizeInfo GenerateFolderInfo(string path, bool includeSubDirs, IEnumerable <FileInfo> additionalFiles = null)
        {
            var folderSizeInfo = new FolderSizeInfo();
            var dir            = new DirectoryInfo(path);
            var files          = dir.EnumerateFiles("*.*", new EnumerationOptions {
                IgnoreInaccessible = true, RecurseSubdirectories = includeSubDirs
            }).ToList();

            if (additionalFiles != null)
            {
                files.AddRange(additionalFiles);
            }
            var size = ByteSize.FromBytes(files.Sum(x => x.Length));

            folderSizeInfo.FolderName        = dir.Name;
            folderSizeInfo.PathToFolder      = dir.FullName;
            folderSizeInfo.FileCount         = files.Count();
            folderSizeInfo.FolderSizeInBytes = size.Bytes;
            folderSizeInfo.FolderSizeInMb    = size.KiloBytes;
            folderSizeInfo.FolderSizeInMb    = size.MegaBytes;
            folderSizeInfo.FolderSizeInGb    = size.GigaBytes;
            folderSizeInfo.FormatedSize      = $"{size.LargestWholeNumberDecimalValue} {size.LargestWholeNumberDecimalSymbol}";
            folderSizeInfo.Files             = GenerateFileSizeInfo(files);
            return(folderSizeInfo);
        }
 private static FolderSizeInfo GetDirectorySize(DirectoryInfo d, List<FolderSizeInfo> data, int levels)
 {
     var currentDirectory = new FolderSizeInfo();
     if (levels >= 0)
         data.Add(currentDirectory);
     long Size = 0;
     // Add file sizes.
     FileInfo[] fis = d.GetFiles();
     foreach (FileInfo fi in fis)
     {
         Size += fi.Length;
     }
     currentDirectory.Size = Size;
     currentDirectory.Path = d;
     // Add subdirectory sizes.
     DirectoryInfo[] dis = d.GetDirectories();
     currentDirectory.DirectoryCount = dis.Length;
     currentDirectory.DirectoryCountWithChildren = dis.Length;
     foreach (DirectoryInfo di in dis)
     {
         var dd = GetDirectorySize(di, data, levels - 1);
         Size += dd.SizeWithChildren;
         currentDirectory.DirectoryCountWithChildren += dd.DirectoryCountWithChildren;
     }
     currentDirectory.SizeWithChildren = Size;
     return currentDirectory;
 }
Beispiel #3
0
        /// <summary>
        /// Serializes the object to JSON.
        /// </summary>
        /// <param name="writer">The <see cref="T: Newtonsoft.Json.JsonWriter" /> to write to.</param>
        /// <param name="obj">The object to serialize to JSON.</param>
        internal static void Serialize(JsonWriter writer, FolderSizeInfo obj)
        {
            // Required properties are always serialized, optional properties are serialized when not null.
            writer.WriteStartObject();
            if (obj.StoreRelativePath != null)
            {
                writer.WriteProperty(obj.StoreRelativePath, "StoreRelativePath", JsonWriterExtensions.WriteStringValue);
            }

            if (obj.FolderSize != null)
            {
                writer.WriteProperty(obj.FolderSize, "FolderSize", JsonWriterExtensions.WriteStringValue);
            }

            writer.WriteEndObject();
        }
Beispiel #4
0
    /// <summary>
    /// Calculate disk space usage under <paramref name="root"/>.  If <paramref name="levels"/> is provided,
    /// then return subdirectory disk usages as well, up to <paramref name="levels"/> levels deep.
    /// If levels is not provided or is 0, return a list with a single element representing the
    /// directory specified by <paramref name="root"/>.
    /// </summary>
    /// <returns></returns>
    public static FolderSizeInfo GetDirectorySize(DirectoryInfo root, int levels = 0)
    {
        var currentDirectory = new FolderSizeInfo();

        // Add file sizes.
        FileInfo[] fis = root.GetFiles();
        currentDirectory.Size = 0;
        foreach (FileInfo fi in fis)
        {
            currentDirectory.Size += fi.Length;
        }
        // Add subdirectory sizes.
        DirectoryInfo[] dis = root.GetDirectories();
        currentDirectory.Path                       = root;
        currentDirectory.SizeWithChildren           = currentDirectory.Size;
        currentDirectory.DirectoryCount             = dis.Length;
        currentDirectory.DirectoryCountWithChildren = dis.Length;
        currentDirectory.FileCount                  = fis.Length;
        currentDirectory.FileCountWithChildren      = fis.Length;
        if (levels >= 0)
        {
            currentDirectory.Children = new List <FolderSizeInfo>();
        }
        foreach (DirectoryInfo di in dis)
        {
            var dd = GetDirectorySize(di, levels - 1);
            if (levels >= 0)
            {
                currentDirectory.Children.Add(dd);
            }
            currentDirectory.SizeWithChildren           += dd.SizeWithChildren;
            currentDirectory.DirectoryCountWithChildren += dd.DirectoryCountWithChildren;
            currentDirectory.FileCountWithChildren      += dd.FileCountWithChildren;
        }
        return(currentDirectory);
    }
Beispiel #5
0
        public async IAsyncEnumerable <FolderSizeInfo> CalculateFolderSizesAsyncStream(string rootDirPath, bool includeSubDirs)
        {
            bool shouldCalculate = true;

            try
            {
                if (!Directory.Exists(rootDirPath))
                {
                    shouldCalculate = false;
                }
            }
            catch (Exception ex)
            {
                var exception = new FileServiceException(
                    "Failure in file service",
                    new CalculateFolderSizesAsyncStreamException(
                        "Size calculation for given root path failed",
                        ex));
                throw exception;
            }

            if (shouldCalculate)
            {
                await Task.Delay(0);

                var options = new EnumerationOptions
                {
                    IgnoreInaccessible    = true,
                    RecurseSubdirectories = includeSubDirs
                };
                string[] allFolders;
                try
                {
                    allFolders = Directory.GetDirectories(rootDirPath, "*", options);
                }
                catch (Exception ex)
                {
                    var exception = new FileServiceException(
                        "Failure in file service",
                        new CalculateFolderSizesAsyncStreamException(
                            "Size calculation for given root path failed",
                            ex));
                    throw exception;
                }
                foreach (var folder in allFolders)
                {
                    FolderSizeInfo generated = null;
                    try
                    {
                        generated = GenerateFolderInfo(folder, true);
                    }
                    catch (Exception ex)
                    {
                        var exception = new FileServiceException(
                            "Failure in file service",
                            new CalculateFolderSizesAsyncStreamException(
                                "Size calculation for given root path failed",
                                ex));
                        throw exception;
                    }
                    yield return(generated);
                }
                FolderSizeInfo root = null;
                try
                {
                    root = GenerateFolderInfo(rootDirPath, false);
                }
                catch (Exception ex)
                {
                    var exception = new FileServiceException(
                        "Failure in file service",
                        new CalculateFolderSizesAsyncStreamException(
                            "Size calculation for given root path failed",
                            ex));
                    throw exception;
                }
                yield return(root);
            }
        }