使用C#在WinRT中获取可用磁盘空间

[DllImport("kernel32.dll", SetLastError = true)] static extern bool GetDiskFreeSpaceEx( string lpDirectoryName, out ulong lpFreeBytesAvaliable, out ulong lpTotalNumberOfBytes, out ulong lpTotalNumberOfFreeBytes); // Returns free disk space from directory. public static ulong GetFreeDiskSpace(string directory) { ulong a, b, c; if (GetDiskFreeSpaceEx(directory, out a, out b, out c)) { Debug.WriteLine(a); } return a; } 

我正在开发一个Windowsapp store应用。 我打电话时为什么变量包含0:

 GetFreeDiskSpace("C:\\"); 

不执行Debug.WriteLine(a)行。

研究其他东西我最终找到了答案:“在Windows 8 Metro Apps中,您不能访问文件夹或在KnownFolders之外进行驱动。”

MSDN

你写错了。 它必须是这样的:

 GetFreeDiskSpace("C:"); [DllImport("kernel32.dll", SetLastError = true)] static extern bool GetDiskFreeSpaceEx( string lpDirectoryName, out ulong lpFreeBytesAvailable, out ulong lpTotalNumberOfBytes, out ulong lpTotalNumberOfFreeBytes); 

也在另一页上找到了这个。 在WinRT上有所不同

无法从Metro风格的应用程序获得可用磁盘空间

 static void TestDiskSpace() { IStorageFolder appFolder = ApplicationData.Current.LocalFolder; ulong a, b, c; if(GetDiskFreeSpaceEx(appFolder.Path, out a, out b, out c)) Debug.WriteLine(string.Format("{0} bytes free", a)); }