保存文件的时候,经常需要判断一下是否磁盘空间不足。
在Metro下有个API
[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool GetDiskFreeSpaceEx(
string lpDirectoryName,
out ulong lpFreeBytesAvailable,
out ulong lpTotalNumberOfBytes,
out ulong lpTotalNumberOfFreeBytes);
MSDN说这个可以在App中用,但实际上,由于Metro环境的局限性,不能访问大多数文件系统,所以这个函数尽可以基于 Path="." 或者 应用安装位置来获得所在盘的空间大小。
还好找到另外一个方法。IStorageItem可以传StorageFile或者StorageFolder
public static async Task<ulong> GetFreeSpace(IStorageItem sf)
{
var properties = await sf.GetBasicPropertiesAsync();
var filteredProperties = await properties.RetrievePropertiesAsync(new[] {"System.FreeSpace"});
var freeSpace = filteredProperties["System.FreeSpace"];
return (ulong) freeSpace;
}
原文:http://blog.csdn.net/problc/article/details/22652067