1

我在一个管理可移动设备的 UWP 应用程序上工作。所以,我确保在清单中有这个。

<Capabilities>
   <uap:Capability Name="removableStorage"/>
</Capabilities>

我需要获取设备的可用空间和总空间。所以,我像这样使用 DriveInfo。

DriveInfo z = new DriveInfo(@"E:\");
long x = z.TotalFreeSpace;

当他尝试获取可用空间并将其分配给 x 时,这会出现以下异常:

System.UnauthorizedAccessException : 'Access to the path 'E:\' is denied.'

如您所见,该驱动器实际上是一个可移动驱动器。

在此处输入图像描述

一旦检测到并添加了驱动器,我需要的过程就会发生。因此,这发生在 添加的 a 事件中DeviceWatcherIsReady=false我在监视窗口中看到设备未准备好。也许我太早尝试访问它?该事件是“添加”,而不是“添加”,并且UnauthorizedAccessException不是应该发生的事件。我想aDeviceNotReadyException会更合适。因此,我得出结论,该问题与尚未准备就绪的事实无关。

4

1 回答 1

2

即使声明了removableStorage功能,您仍然需要使用 UWP API 来访问文件 - 这意味着使用StorageFolderAPI。您可以使用:

var drives = await KnownFolders.RemovableDevices.GetFoldersAsync();

检索您可以查询的所有可移动驱动器。这KnownFolders.RemovableDevices实际上是一个虚拟文件夹,其中包含每个可移动驱动器的子文件夹(请参阅文档)。要检查驱动器号,您可以检查Path每个文件夹的。

要检索剩余的可用空间,您可以检查可移动存储文件夹的属性:

var properties = await folder.Properties.RetrievePropertiesAsync(
    new string[] { "System.FreeSpace" });
return (UInt64)properties["System.FreeSpace"];
于 2020-12-29T22:24:57.547 回答