Praveen
Praveen

Reputation: 49

Retrieving the amount of local storage on a device in UWP app

I have been trying to find the amount of free storage space available in the fixed drive on a device in my UWP app. I have been using the following code to achieve this-

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

But whenever I run this, d.IsReady always returns false indicating that the device is not ready. I referred this- https://learn.microsoft.com/en-us/dotnet/api/system.io.driveinfo.isready?view=netframework-4.8. But haven't been able to understand.

Please help me with what am I doing wrong. Or is there any other way to achieve this?

Upvotes: 0

Views: 587

Answers (2)

Greg Thatcher
Greg Thatcher

Reputation: 1443

If you only need to know the free space on the drive where your UWP app is installed (usually, the C: drive), you can use the following without adding any additional capabilities:

using Windows.Storage;

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

Upvotes: 3

Nico Zhu
Nico Zhu

Reputation: 32775

Retrieving the amount of local storage on a device in UWP app

AvailableFreeSpace is not available in UWP system. For getting available free space, you need use StorageFolder System.FreeSpace property to achieve. Pleas note if you used GetFolderFromPathAsync metod, you need to allow broadFileSystemAccess capability before. Please refer this case 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));
    }
}

Upvotes: 1

Related Questions