Exemplo n.º 1
0
        public async Task <IEnumerable <IPhysicalDrive> > GetPhysicalDrives()
        {
            if (!OperatingSystem.IsMacOs())
            {
                throw new NotSupportedException("MacOS physical drive manager is not running on macOS environment");
            }

            var listOutput = await GetDiskUtilExternalDisks();

            var disks = DiskUtilReader.ParseList(new MemoryStream(Encoding.UTF8.GetBytes(listOutput))).ToList();

            var physicalDrives = new List <IPhysicalDrive>();

            foreach (var disk in disks)
            {
                var partitionDevices = disk.Partitions.Select(x => x.DeviceIdentifier).ToList();
                var infoOutput       = await GetDiskUtilInfoDisk(disk.DeviceIdentifier);

                var info = DiskUtilReader.ParseInfo(new MemoryStream(Encoding.UTF8.GetBytes(infoOutput)));

                if (info.BusProtocol.Equals("Disk Image", StringComparison.OrdinalIgnoreCase))
                {
                    continue;
                }

                physicalDrives.Add(new MacOsPhysicalDrive(info.DeviceNode, info.MediaType, info.IoRegistryEntryName, info.Size, partitionDevices));
            }

            return(physicalDrives);
        }
        public IPhysicalDriveManager Create()
        {
            if (OperatingSystem.IsWindows())
            {
                return(new WindowsPhysicalDriveManager(this.loggerFactory.CreateLogger <WindowsPhysicalDriveManager>()));
            }

            if (OperatingSystem.IsMacOs())
            {
                return(new MacOsPhysicalDriveManager(this.loggerFactory.CreateLogger <MacOsPhysicalDriveManager>()));
            }

            if (OperatingSystem.IsLinux())
            {
                return(new LinuxPhysicalDriveManager(this.loggerFactory.CreateLogger <LinuxPhysicalDriveManager>()));
            }

            throw new NotSupportedException("Unsupported operating system");
        }