Получение объема локального хранилища на устройстве в приложении UWP - PullRequest
0 голосов
/ 05 июня 2019

Я пытался найти объем свободного места на жестком диске устройства в моем приложении 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 ]

2 голосов
/ 08 июня 2019

Если вам нужно знать только свободное место на диске, на котором установлено приложение 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 голос
/ 06 июня 2019

Получение объема локального хранилища на устройстве в приложении UWP

AvailableFreeSpace недоступно в системе UWP.Чтобы получить доступное свободное место, вам нужно использовать свойство StorageFolder System.FreeSpace .Обратите внимание, что если вы использовали GetFolderFromPathAsync метод, вам нужно разрешить возможность broadFileSystemAccess раньше.Пожалуйста, обратитесь этот случай ссылка .

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));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...