保存文件的时候,经常需要判断一下是否磁盘空间不足。
在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; }