[英]UWP - DriveInfo gives access denied for removable storage even if included in capability
我在一個管理可移動設備的 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.'
如您所見,該驅動器實際上是一個可移動驅動器。
一旦檢測到並添加了驅動器,我需要的過程就會發生。 因此,這發生在DeviceWatcher
的已添加事件中。 我在手表 window 中看到設備未准備好IsReady=false
。 也許我太早嘗試訪問它? 該事件是“已添加”,而不是“正在添加”,並且UnauthorizedAccessException
不是應該發生的事件。 我想DeviceNotReadyException
會更合適。 因此,我得出結論,該問題與尚未准備就緒的事實無關。
即使聲明了removableStorage
存儲功能,您仍然需要使用 UWP API 來訪問文件 - 這意味着使用StorageFolder
API。 您可以使用:
var drives = await KnownFolders.RemovableDevices.GetFoldersAsync();
檢索您可以查詢的所有可移動驅動器。 KnownFolders.RemovableDevices
實際上是一個虛擬文件夾,其中包含每個可移動驅動器的子文件夾(請參閱文檔)。 要檢查驅動器號,您可以檢查每個文件夾的Path
。
要檢索剩余的可用空間,您可以檢查可移動存儲文件夾的屬性:
var properties = await folder.Properties.RetrievePropertiesAsync(
new string[] { "System.FreeSpace" });
return (UInt64)properties["System.FreeSpace"];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.