public static PackedDirectoryEntry GetDirectoryEntry(DirectoryInfoEx directory, string parentFolder)
        {
            if (!directory.Exists)
            {
                try
                {
                    var guid = new Guid(directory.FullName);
                    directory = new DirectoryInfoEx(KnownFolder.FromKnownFolderId(guid));
                    if (!directory.Exists)
                    {
                        return(null);
                    }
                }
                catch (Exception)
                {
                    return(null);
                }
            }

            PackedDirectoryEntry result;

            if (directory.DirectoryType == DirectoryInfoEx.DirectoryTypeEnum.dtDrive)
            {
                var drive = DriveInfo.GetDrives().FirstOrDefault(x => x.RootDirectory.FullName == directory.FullName);
                if (drive != null)
                {
                    if (!drive.IsReady)
                    {
                        result = new DriveDirectoryEntry
                        {
                            TotalSize = 0,
                            UsedSpace = 0,
                            DriveType = (DriveDirectoryType)drive.DriveType
                        }
                    }
                }
                ;
                else
                {
                    result = new DriveDirectoryEntry
                    {
                        TotalSize = drive.TotalSize,
                        UsedSpace = drive.TotalSize - drive.TotalFreeSpace,
                        DriveType = (DriveDirectoryType)drive.DriveType
                    }
                };
Exemple #2
0
        private DirectoryEntry CreateSpecializedDirectory(DirectoryInfoEx directory)
        {
            if (directory.DirectoryType == DirectoryInfoEx.DirectoryTypeEnum.dtDrive)
            {
                var drive = _drives.Value.FirstOrDefault(x => x.RootDirectory.FullName == directory.FullName);
                if (drive != null)
                {
                    DriveDirectoryEntry driveDirectory;
                    if (drive.IsReady)
                    {
                        driveDirectory = new DriveDirectoryEntry
                        {
                            TotalSize = drive.TotalSize,
                            UsedSpace = drive.TotalSize - drive.TotalFreeSpace,
                            DriveType = drive.DriveType
                        }
                    }
                    ;
                    else
                    {
                        driveDirectory =
                            new DriveDirectoryEntry {
                            TotalSize = 0, UsedSpace = 0, DriveType = drive.DriveType
                        }
                    };

                    SetSpecialFolderAttributes(directory, driveDirectory);
                    return(driveDirectory);
                }
            }

            var specialDirectory = new SpecialDirectoryEntry();

            if (SetSpecialFolderAttributes(directory, specialDirectory))
            {
                return(specialDirectory);
            }

            return(new DirectoryEntry());
        }