使用c#在WinRT中获得空闲的磁盘空间

本文关键字:磁盘 空间 WinRT 使用 | 更新日期: 2023-09-27 18:03:50

        [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;
        }

我正在开发一个Windows Store应用程序。为什么变量包含0时,我调用:

GetFreeDiskSpace("C:''");

?

有Debug.WriteLine(a)的那行不执行

使用c#在WinRT中获得空闲的磁盘空间

我最终找到了答案:"在Windows 8 Metro应用程序中,您不允许访问已知文件夹之外的文件夹或驱动器。"

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-style应用程序获取空闲磁盘空间

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));
}