我如何找到通用Windows Phone 8.1应用程序中的可用空间

时间:2014-05-03 14:55:24

标签: c# windows-phone windows-phone-8.1

有谁知道如何访问通用Windows Phone 8.1应用程序中的可用空间?在Windows Phone 8(.1)Silverlight应用程序中,我可以使用此代码:

int availableStorage = IsolatedStorageFile.GetUserStoreForApplication().AvailableFreeSpace;

但是Windows(电话)8.1应用程序中没有System.IO.IsolatedStorage。

1 个答案:

答案 0 :(得分:10)

可以完成like in answers to this question。正如我所尝试的那样,下面代码中的方法返回空闲字节数:

public async Task<UInt64> GetFreeSpace()
{
    StorageFolder local = ApplicationData.Current.LocalFolder;
    var retrivedProperties = await local.Properties.RetrievePropertiesAsync(new string[] { "System.FreeSpace" });
    return (UInt64)retrivedProperties["System.FreeSpace"];
}

// usage:
UInt64 myFreeSpace = await GetFreeSpace();

有关要追溯的属性(格式等)的更多信息,您可以find at MSDN


更多信息 - 请注意,该方法获得了它所受影响的文件夹的可用空间。所以,如果我们这样运行:

public async Task<UInt64> GetFreeSpace(StorageFolder folder)
{
    var retrivedProperties = await folder.Properties.RetrievePropertiesAsync(new string[] { "System.FreeSpace" });
    return (UInt64)retrivedProperties["System.FreeSpace"];
}

// and use it like this:
UInt64 spaceOfInstallationFolder = await GetFreeSpace(ApplicationData.Current.LocalFolder);
UInt64 spaceOfMusicLibrary = await GetFreeSpace(KnownFolders.MusicLibrary);

我们将根据用户电话的设置获得结果:

  • ApplicationData.Current.LocalFolder指的是安装了应用程序的地方 - 因此,如果用户设置了应用程序将安装在SD上,那么您将在SD卡上看到空闲位置,
  • KnownFolders.MusicLibrary(例如,它可以是PicturesLibrary等,也确保您在清单文件中添加了可用性,否则您将获得异常) - 相同的情况取决于用户设置 - 它可以是电话或SD上的空间

因此,如果应用程序已安装在手机上,则会在LocalFolder上进行操作,您将在手机上获得空间。如果你想要SD空间,那么你可以运行这样的方法(记住功能):

UInt64 spaceOfMusicLibrary = await GetFreeSpace((await KnownFolders.RemovableDevices.GetFoldersAsync()).FirstOrDefault());

另请注意,如果用户已设置要在SD(应用程序,音乐,图片)上安装的所有内容,则获取手机的可用空间是无用的,因为您将无法使用它(未经授权的访问)。简单地说 - 如果您可以访问文件夹,则可以获得其可用空间。