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 } };
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()); }