Beispiel #1
0
        /// <summary>
        ///     Gets the file system infos.
        /// </summary>
        /// <param name="directory">The directory.</param>
        /// <param name="currentLevel">The current level.</param>
        /// TODO Edit XML Comment Template for GetFileSystemInfos
        private void GetFileSystemInfos(
            DirectoryInfo directory,
            int currentLevel)
        {
            try
            {
                if (!ExcludedPaths.IsNullOrEmpty() &&
                    ExcludedPaths.ContainsIgnoreCase(directory.FullName))
                {
                    return;
                }

                try
                {
                    var directorySizeInfo = new FileSystemSizeInfo(directory);

                    if (MinFolderSize != null &&
                        directorySizeInfo.Size < MinFolderSize.Value ||
                        MaxFolderSize != null &&
                        directorySizeInfo.Size > MaxFolderSize.Value ||
                        MinFolderContents != null &&
                        directorySizeInfo.ContentsCount
                        < MinFolderContents.Value ||
                        MaxFolderContents != null &&
                        directorySizeInfo.ContentsCount
                        > MaxFolderContents.Value)
                    {
                        return;
                    }

                    if (directorySizeInfo.PathLevels > MaxPathLevels)
                    {
                        MaxPathLevels = directorySizeInfo.PathLevels;
                    }

                    FileSystemSizeInfos.Add(directorySizeInfo);
                }
                catch (UnauthorizedAccessException)
                {
                }

                foreach (var fileSystemInfo in directory.GetFileSystemInfos())
                {
                    CancellationToken.ThrowIfCancellationRequested();

                    var fileInfo = fileSystemInfo as FileInfo;

                    if (fileInfo != null)
                    {
                        if (MinFileSize != null &&
                            fileInfo.Length < MinFileSize.Value ||
                            MaxFileSize != null &&
                            fileInfo.Length > MaxFileSize.Value ||
                            ShouldExcludeExtensions &&
                            Extensions.ContainsIgnoreCase(fileInfo.Extension) ||
                            !ShouldExcludeExtensions &&
                            !Extensions.ContainsIgnoreCase(
                                fileInfo.Extension))
                        {
                            continue;
                        }

                        var fileSizeInfo = new FileSystemSizeInfo(fileInfo);

                        if (fileSizeInfo.PathLevels > MaxPathLevels)
                        {
                            MaxPathLevels = fileSizeInfo.PathLevels;
                        }

                        FileSystemSizeInfos.Add(fileSizeInfo);
                    }

                    var directoryInfo = fileSystemInfo as DirectoryInfo;

                    if (directoryInfo == null ||
                        Scope == Scope.NoChildren ||
                        Scope == Scope.ImmediateChildren && currentLevel > 0)
                    {
                        continue;
                    }

                    GetFileSystemInfos(directoryInfo, currentLevel + 1);
                }
            }
            catch (UnauthorizedAccessException)
            {
            }
        }