RUDE

Лучший способ определить объем пространства, доступного для хранения файлов приложений с формами Xamarin?

Из исследований я обнаружил, что можно определить доступное пространство для хранения файлов приложений в iOS, Андроид и UWP с помощью служб зависимостей с кодом для конкретной платформы, приведенным ниже:

Для iOS:

private double GetRemainingStorageSpace(string directoryPath)

{
    
    var freeExternalStorage = NSFileManager.DefaultManager.GetFileSystemAttributes(directoryPath).FreeSize;

    return (double)freeExternalStorage;

}

Для Android это можно сделать так:

var path = new StatFs(directoryPath);
long blockSize = path.BlockSizeLong;

long avaliableBlocks = path.AvailableBlocksLong;

double freeSpace = blockSize * avaliableBlocks;


return freeSpace

Или вот так:

var fl = new Java.IO.File(directoryPath);

var freeSpace = fl.UsableSpace;
return (double)freeSpace;

Для универсальной рабочей среды:

string freeSpaceKey = "System.FreeSpace";


StorageFolder folder = await StorageFolder.GetFolderFromPathAsync(directoryPath);

var properties = await folder.Properties.RetrievePropertiesAsync(new string[]
{
freeSpaceKey
});


var freeSpace = properties[freeSpaceKey];


return (UInt64)freeSpace;

Тогда мой вопрос:

1.) Действительно ли эти строки кода возвращают количество байтов, которое может быть сохранено в определенном каталоге? Или они возвращают количество байтов, которое может храниться на всем устройстве?

2.) Для Android я не слишком уверен, в чем разница между двумя способами сделать это. Я надеюсь на объяснение разницы между обоими и тем, что лучше использовать?

Был бы признателен за объяснение.


30
1

Ответ:

Решено
1.) Do these lines of code above actually return the amount of bytes that can be stored in a specific directory? Or do they return the amount of bytes that can be stored on the whole device?

Очевидно, это specific directory, потому что в коде в качестве параметра требуется конкретный путь к папке.

Вы можете попробовать установить путь к каталогу как System.Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments)

И

System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal)

Чтобы увидеть разницу.


2.) For Android I am not too sure what the difference between the two ways of doing this are I am hoping for an explanation of the difference between the both of then and which is a better to use?

Я не могу сказать, в чем разница или что лучше, потому что, основываясь на моем тесте, результат одинаковый, и для получения подробной информации вы можете обратиться к здесь, это может быть полезно.