在UWP环境中获得磁盘可用空间大小的教程一直没有,研究了几天我成功获得了相关数据。

很多开发win32程序的小伙伴喜欢使用**System.IO.DriveInfo.GetDrives()**,但是在UWP,这个只能获得盘符目录。

下面我介绍一下UWP获得磁盘可用空间大小的方法。

首先你需要一个指向根目录的StorageFolder对象,

我们要使用StorageFolder.Properties.RetrievePropertiesAsync()获得文件夹信息。

Namespace:

Windows.Storage.FileProperties

Assemblies:

Windows.Storage.FileProperties.dll, Windows.dll

C# 复制

1
public IAsyncOperation<IDictionary<string, object>> RetrievePropertiesAsync(IEnumerable<String> propertiesToRetrieve)

https://docs.microsoft.com/zh-cn/uwp/api/windows.storage.fileproperties.storageitemcontentproperties.retrievepropertiesasync?f1url=https%3A%2F%2Fmsdn.microsoft.com%2Fquery%2Fdev15.query%3FappId%3DDev15IDEF1%26l%3DZH-CN%26k%3Dk(Windows.Storage.FileProperties.StorageItemContentProperties.RetrievePropertiesAsync)%3Bk(TargetFrameworkMoniker-.NETCore%2CVersion%3Dv5.0)%3Bk(DevLang-csharp)%26rd%3Dtrue

这里我们使用System.FreeSpaceSystem.Capacity获得空余空间和容量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
List<string> list = new List<string>();

list.Add("System.FreeSpace");
list.Add("System.Capacity");
var dc = await Folder.Properties.RetrievePropertiesAsync(list);
storageFiles.Add(new Disk()
{
SpecialPath = SpecialPath.ThisPC,
DisplayName = Folder.DisplayName,
IStorageItem = Folder,
FreeSpace = Convert.ToInt64(dc["System.FreeSpace"]),
Capacity = Convert.ToInt64(dc["System.Capacity"])
});

可用的属性字符串

System.AcquisitionID