示例#1
0
        private async Task GetDrives(IList <DriveItem> list)
        {
            var drives = DriveInfo.GetDrives().ToList();

            var remDevices = await DeviceInformation.FindAllAsync(StorageDevice.GetDeviceSelector());

            var supportedDevicesNames = remDevices.Select(x => StorageDevice.FromId(x.Id).Name);

            foreach (DriveInfo driveInfo in drives.ToList())
            {
                if (!supportedDevicesNames.Contains(driveInfo.Name) && driveInfo.DriveType == System.IO.DriveType.Removable)
                {
                    drives.Remove(driveInfo);
                }
            }


            foreach (var drive in drives)
            {
                // If drive already in list, skip.
                if (list.Any(x => x.Tag == drive.Name))
                {
                    continue;
                }

                var folder = Task.Run(async() => await StorageFolder.GetFolderFromPathAsync(drive.Name)).Result;


                DriveType type = DriveType.Unkown;

                switch (drive.DriveType)
                {
                case System.IO.DriveType.CDRom:
                    type = DriveType.CDRom;
                    break;

                case System.IO.DriveType.Fixed:
                    if (InstanceTabsView.NormalizePath(drive.Name) != InstanceTabsView.NormalizePath("A:") &&
                        InstanceTabsView.NormalizePath(drive.Name) !=
                        InstanceTabsView.NormalizePath("B:"))
                    {
                        type = DriveType.Fixed;
                    }
                    else
                    {
                        type = DriveType.FloppyDisk;
                    }
                    break;

                case System.IO.DriveType.Network:
                    type = DriveType.Network;
                    break;

                case System.IO.DriveType.NoRootDirectory:
                    type = DriveType.NoRootDirectory;
                    break;

                case System.IO.DriveType.Ram:
                    type = DriveType.Ram;
                    break;

                case System.IO.DriveType.Removable:
                    type = DriveType.Removable;
                    break;

                case System.IO.DriveType.Unknown:
                    type = DriveType.Unkown;
                    break;

                default:
                    type = DriveType.Unkown;
                    break;
                }

                var driveItem = new DriveItem(
                    folder,
                    Visibility.Visible,
                    type);

                Logger.Info($"Drive added: {driveItem.Tag}, {driveItem.Type}");

                list.Add(driveItem);
            }
        }
示例#2
0
        private async Task GetDrives(IList <DriveItem> list)
        {
            var drives = DriveInfo.GetDrives().ToList();

            var remDevices = await DeviceInformation.FindAllAsync(StorageDevice.GetDeviceSelector());

            List <string> supportedDevicesNames = new List <string>();

            foreach (var item in remDevices)
            {
                try
                {
                    supportedDevicesNames.Add(StorageDevice.FromId(item.Id).Name);
                }
                catch (Exception e)
                {
                    Logger.Warn("Can't get storage device name: " + e.Message + ", skipping...");
                }
            }

            foreach (DriveInfo driveInfo in drives.ToList())
            {
                if (!supportedDevicesNames.Contains(driveInfo.Name) && driveInfo.DriveType == System.IO.DriveType.Removable)
                {
                    drives.Remove(driveInfo);
                }
            }

            foreach (var drive in drives)
            {
                // If drive already in list, skip.
                if (list.Any(x => x.Path == drive.Name))
                {
                    continue;
                }

                var folder = Task.Run(async() => await StorageFolder.GetFolderFromPathAsync(drive.Name)).Result;

                DriveType type = DriveType.Unknown;

                switch (drive.DriveType)
                {
                case System.IO.DriveType.CDRom:
                    type = DriveType.CDRom;
                    break;

                case System.IO.DriveType.Fixed:
                    if (InstanceTabsView.NormalizePath(drive.Name) != InstanceTabsView.NormalizePath("A:") &&
                        InstanceTabsView.NormalizePath(drive.Name) !=
                        InstanceTabsView.NormalizePath("B:"))
                    {
                        type = DriveType.Fixed;
                    }
                    else
                    {
                        type = DriveType.FloppyDisk;
                    }
                    break;

                case System.IO.DriveType.Network:
                    type = DriveType.Network;
                    break;

                case System.IO.DriveType.NoRootDirectory:
                    type = DriveType.NoRootDirectory;
                    break;

                case System.IO.DriveType.Ram:
                    type = DriveType.Ram;
                    break;

                case System.IO.DriveType.Removable:
                    type = DriveType.Removable;
                    break;

                case System.IO.DriveType.Unknown:
                    type = DriveType.Unknown;
                    break;

                default:
                    type = DriveType.Unknown;
                    break;
                }

                var driveItem = new DriveItem(folder, type);

                Logger.Info($"Drive added: {driveItem.Path}, {driveItem.Type}");

                list.Add(driveItem);
            }
        }