我一直在尝试在我的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。但是还无法理解。
请帮助我解决我做错的事情。还是有其他方法可以实现这一目标?
答案 0 :(得分:2)
如果您只需要知道安装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 :(得分:1)
在UWP应用中检索设备上的本地存储量
AvailableFreeSpace
在UWP系统中不可用。为了获得可用空间,您需要使用StorageFolder
System.FreeSpace属性来实现。请注意,如果您使用GetFolderFromPathAsync
方法,则需要先允许broadFileSystemAccess
功能。请参考这种情况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));
}
}