在UWP应用中检索设备上的本地存储量

时间:2019-06-05 15:18:32

标签: c# xaml uwp

我一直在尝试在我的UWP应用中的设备上的固定驱动器中找到可用的可用存储空间量。我一直在使用以下代码来实现这一目标-

DriveInfo[] allDrives = DriveInfo.GetDrives();
foreach (DriveInfo d in allDrives)
{
    if (d.DriveType == DriveType.Fixed && d.IsReady)
    {
        double availableFreeSpaceInBytes = d.AvailableFreeSpace;
    }
}

但是,每当我运行此命令时,d.IsReady始终返回false,表明设备尚未就绪。我提到了这个https://docs.microsoft.com/en-us/dotnet/api/system.io.driveinfo.isready?view=netframework-4.8。但是还无法理解。

请帮助我解决我做错的事情。还是有其他方法可以实现这一目标?

2 个答案:

答案 0 :(得分:2)

如果您只需要知道安装UWP应用程序的驱动器(通常是C:驱动器)上的可用空间,则可以使用以下内容而无需添加任何其他功能:

using Windows.Storage;

string freeSpaceKey = "System.FreeSpace";
var retrieveProperties = await ApplicationData.Current.LocalFolder.Properties.RetrievePropertiesAsync(new string[] { freeSpaceKey });
var freeSpaceRemaining = (ulong)retrieveProperties[freeSpaceKey];

答案 1 :(得分:1)

  

在UWP应用中检索设备上的本地存储量

AvailableFreeSpace在UWP系统中不可用。为了获得可用空间,您需要使用StorageFolder System.FreeSpace属性来实现。请注意,如果您使用GetFolderFromPathAsync方法,则需要先允许broadFileSystemAccess功能。请参考这种情况link

const String k_freeSpace = "System.FreeSpace";
const String k_totalSpace = "System.Capacity";
DriveInfo[] allDrives = DriveInfo.GetDrives();
foreach (DriveInfo d in allDrives)
{
    try
    {
        Debug.WriteLine("Drive: " + d.Name);
        Debug.WriteLine("RootDir: " + d.RootDirectory.FullName);

        StorageFolder folder = await StorageFolder.GetFolderFromPathAsync(d.RootDirectory.FullName);
        var props = await folder.Properties.RetrievePropertiesAsync(new string[] { k_freeSpace, k_totalSpace });
        Debug.WriteLine("FreeSpace: " + (UInt64)props[k_freeSpace]);
        Debug.WriteLine("Capacity:  " + (UInt64)props[k_totalSpace]);
    }
    catch (Exception ex)
    {
        Debug.WriteLine(String.Format("Couldn't get info for drive {0}.  Does it have media in it?", d.Name));
    }
}