2013-03-14 47 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

相關問題