2013-03-14 62 views
3
 [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应用商店应用。为什么一个变量在我打电话时包含0:使用C获取WinRT中的可用磁盘空间#

GetFreeDiskSpace("C:\\"); 

Debug.WriteLine(a)的行未被执行。

回答

1

研究别的东西,我最终找到了答案:“在Windows 8地铁应用程序你不能访问文件夹或驱动KnownFolders之外”

MSDN

+1

我使用filepicker来可以访问这些文件,但是当我运行获取可用空间的函数时,似乎工作的唯一文件夹是“ApplicationData.Current.LocalFolder” – 2013-07-10 13:27:41

0

您正在写入错误的驱动器。它需要是这样的:

GetFreeDiskSpace("C:"); 

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

在另一页上也发现了这一点。这是对WinRT的不同

Unable to get free disk space from Metro-style app

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

嗯,我执行你的代码,它的工作方式都为我。 – 2013-03-14 16:51:52

+0

我这样做之前,并且lpFreeBytesAvaliable变量(在我的方法中称为'a')已经为0. – Aleff 2013-03-14 16:54:42

+0

我错过了您为WinRT写作,它以不同方式进行写作。 – 2013-03-14 16:56:06