2015-04-01 61 views
1

我正在使用Windows應用商店應用(Windows 8.1,使用VS2012),並且我有從特定存儲文件夾檢索可用/已用空間時出錯,這是從存儲設備中檢索。只是要清楚,這個應用程序是爲了在桌面上運行,並通過存儲設備API與連接到它的USB設備交換文件。如何獲得存儲設備上的可用空間

這是我到現在爲止:

StorageFolder folder = Windows.Devices.Portable.StorageDevice.FromId(phoneId); 

UInt64[] info = new UInt64[] {}; 
var properties = await folder.Properties.RetrievePropertiesAsync(
    new string[] { "System.FreeSpace", "System.Capacity" }); 

if (properties.ContainsKey("System.FreeSpace") && properties.ContainsKey("System.FreeSpace")) 
{ 
    info = new UInt64[] { 
    (UInt64) properties["System.FreeSpace"], 
    (UInt64) properties["System.Capacity"] 
    }; 
} 
return info; 

但沒有成功,「信息」始終是一個空數組。有任何想法嗎?

+0

請參見[56,「問題‘’包括在他們的頭銜?」標籤(http://meta.stackexchange.com/questions/19190/should-questions -include-tags-in-titles),其中的共識是「不,他們不應該」! – 2015-04-01 13:28:21

+0

沒有注意到。謝謝 – 2015-04-01 13:56:42

回答

1

我發現我做錯了什麼。我的StorageFolder對象代表連接到桌面的手機。如果用戶通過資源管理器並訪問電話文件夾,將會看到它的「內部文件夾」,它們是手機的實際存儲文件夾(例如內部存儲器,SD卡等)。

用手機做到這一點的正確方法是訪問子文件夾(即每個內部存儲器)。我現在使用的代碼:

StorageFolder folder = Windows.Devices.Portable.StorageDevice.FromId(phoneId); 

var data = new List<Tuple<string, UInt64[]>> { }; 
IReadOnlyList<StorageFolder> subFolders = await folder.GetFoldersAsync(); 
foreach (StorageFolder subFolder in subFolders) 
{ 
    var props = await subFolder.Properties.RetrievePropertiesAsync(
    new string[] { "System.FreeSpace", "System.Capacity" }); 
    if (props.ContainsKey("System.FreeSpace") && props.ContainsKey("System.Capacity")) 
    { 
    data.Add(Tuple.Create(
     subFolder.Name, 
     new UInt64[] { 
     (UInt64) props["System.FreeSpace"], 
     (UInt64) props["System.Capacity"] 
    })); 
    } 
} 
return data; 
相關問題