C# 使用C获取WinRT中的可用磁盘空间#
我正在开发一个Windows应用商店应用程序。调用时变量包含0的原因: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
[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));
}