簡體   English   中英

UWP - 即使包含在功能中,DriveInfo 也會拒絕對可移動存儲的訪問

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM