Из исследований я обнаружил, что можно определить доступное пространство для хранения файлов приложений в 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 я не слишком уверен, в чем разница между двумя способами сделать это. Я надеюсь на объяснение разницы между обоими и тем, что лучше использовать?
Был бы признателен за объяснение.
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?
Я не могу сказать, в чем разница или что лучше, потому что, основываясь на моем тесте, результат одинаковый, и для получения подробной информации вы можете обратиться к здесь, это может быть полезно.