Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用C获取WinRT中的可用磁盘空间#_C#_Windows 8_Microsoft Metro_Windows Store Apps - Fatal编程技术网

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

C# 使用C获取WinRT中的可用磁盘空间#,c#,windows-8,microsoft-metro,windows-store-apps,C#,Windows 8,Microsoft Metro,Windows Store Apps,我正在开发一个Windows应用商店应用程序。调用时变量包含0的原因: [DllImport("kernel32.dll", SetLastError = true)] static extern bool GetDiskFreeSpaceEx( string lpDirectoryName, out ulong lpFreeBytesAvaliable, out ulong lpTotalN

我正在开发一个Windows应用商店应用程序。调用时变量包含0的原因:

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


未执行带有Debug.WriteLine(a)的行。

您将驱动器写入错误。它必须是这样的:

GetFreeDiskSpace("C:\\");
在另一页上也找到了这个。在WinRT上是不同的


在研究其他东西时,我最终找到了答案:“在Windows 8 Metro应用程序中,您不允许访问文件夹或在KnownFolders之外驾驶。”


我以前这样做过,并且LPFreeBytesAvailable变量(在我的方法中称为“a”)已经是0。我错过了您为WinRT编写的内容,这与WinRT不同。这就好像我的应用程序没有访问磁盘的权限:(ApplicationData.Current.LocalFolder是本地应用程序数据存储。我需要磁盘的可用空间。“Metro应用程序无权访问文件系统,但应用程序存储文件夹(本地和漫游)和已知文件夹除外(如果在应用程序清单中输入了相应的功能)。“我使用filepicker访问文件,我确实这样做了。但当我运行获取可用空间的功能时,唯一似乎有效的文件夹是
ApplicationData.Current.LocalFolder
GetFreeDiskSpace("C:");

[DllImport("kernel32.dll", SetLastError = true)]
static extern bool GetDiskFreeSpaceEx(
    string lpDirectoryName,
    out ulong lpFreeBytesAvailable,
    out ulong lpTotalNumberOfBytes,
    out ulong lpTotalNumberOfFreeBytes);
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));
}