如何获取 UWP (Windows 10) App 中所有物理驱动器的列表?我尝试使用 Windows.Storage.KnownFolders
,但这样我只能从库中获取文件夹。
最佳答案
我知道您很久以前就问过这个问题,但我创建了一个问题 (Get Internal Drives Using Windows.Storage Namespace in UWP) 来提供我获取内部驱动器的方法,并鼓励对更好的替代方案进行反馈/讨论。
我有完全相同的问题要解决,我可以在网上找到的所有其他内容都不适合我正在尝试做的事情。因此,通过将 BroadFileSystemAccess 属性添加到 list 文件并在隐私设置中为应用程序打开文件系统访问,可以调用 StorageFolder.GetFolderFromPathAsync 获取驱动器号,如果驱动器存在,它将返回 StorageFolder 的一个实例。
遗憾的是没有列出驱动器的方法,所以我写了一些东西来循环遍历字母表中的所有字母并调用 GetFolderFromPathAsync 来查看是否返回了驱动器句柄。
我创建的获取驱动器列表的方法如下:
public List<StorageFolder> GetInternalDrives()
{
string driveLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int driveLettersLen = driveLetters.Length;
string removableDriveLetters = "";
string driveLetter;
List<StorageFolder> drives = new List<StorageFolder>();
StorageFolder removableDevices = KnownFolders.RemovableDevices;
IReadOnlyList<StorageFolder> folders = Task.Run<IReadOnlyList<StorageFolder>>(async () => await removableDevices.GetFoldersAsync()).Result;
foreach (StorageFolder removableDevice in folders)
{
if (string.IsNullOrEmpty(removableDevice.Path)) continue;
driveLetter = removableDevice.Path.Substring(0, 1).ToUpper();
if (driveLetters.IndexOf(driveLetter) > -1) removableDriveLetters += driveLetter;
}
for (int curDrive = 0; curDrive < driveLettersLen; curDrive++)
{
driveLetter = driveLetters.Substring(curDrive, 1);
if (removableDriveLetters.IndexOf(driveLetter) > -1) continue;
try
{
StorageFolder drive = Task.Run<StorageFolder>(async () => await StorageFolder.GetFolderFromPathAsync(driveLetter + ":")).Result;
drives.Add(drive);
}
catch (System.AggregateException) { }
}
return drives;
}
这是调用代码:
List<StorageFolder> drives = GetInternalDrives();
panScanParams.Children.Clear();
foreach (StorageFolder drive in drives)
{
CheckBox cb = new CheckBox();
cb.Content = drive.DisplayName;
cb.IsChecked = true;
panScanParams.Children.Add(cb);
}
虽然代码有效,但调用带有错误参数的方法并处理异常并不是一个好习惯。但由于缺乏合适的替代品,我不知道还有什么其他选择。
关于c# - 所有物理驱动器的列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36175414/