2013-01-22 53 views
13

可能重複:
Programmatically determining space available from UNC Path獲取可用磁盤的可用空間對於給定的路徑在Windows

我試圖找到,我可以從C#調用來檢索信息的功能。 這是我到目前爲止已經試過:

String folder = "z:\myfolder"; // It works 
folder = "\\mycomputer\myfolder"; // It doesn't work 

System.IO.DriveInfo drive = new System.IO.DriveInfo(folder); 
System.IO.DriveInfo a = new System.IO.DriveInfo(drive.Name); 
long HDPercentageUsed = 100 - (100 * a.AvailableFreeSpace/a.TotalSize); 

這工作不錯,但只有當我通過一個驅動器號。是否有通過傳遞整個路徑來獲取空閒空間的方法?

謝謝。

+0

看看[這裏](http://stackoverflow.com/questions/2965729/how-to-get-network-drive-size-in- C-銳 - 無需-MAP-驅動器)。由米奇小麥*回答我相信你將需要通過P/Invoke調用GetDiskFreeSpace(Win32 API)來獲得UNC網絡驅動器的磁盤空閒空間* [C#GetDiskFreeSpace UNC](http://www.sergey.co。 uk/ShowThread.aspx?ID = 4563&AspxAutoDetectCookieSupport = 1) –

回答

24

嘗試使用WINAPI功能GetDiskFreeSpaceEx

[DllImport("kernel32.dll", SetLastError=true, CharSet=CharSet.Auto)] 
[return: MarshalAs(UnmanagedType.Bool)] 
static extern bool GetDiskFreeSpaceEx(string lpDirectoryName, 
    out ulong lpFreeBytesAvailable, 
    out ulong lpTotalNumberOfBytes, 
    out ulong lpTotalNumberOfFreeBytes); 

ulong FreeBytesAvailable; 
ulong TotalNumberOfBytes; 
ulong TotalNumberOfFreeBytes; 

bool success = GetDiskFreeSpaceEx(@"\\mycomputer\myfolder", 
            out FreeBytesAvailable, 
            out TotalNumberOfBytes, 
            out TotalNumberOfFreeBytes); 
if(!success) 
    throw new System.ComponentModel.Win32Exception(); 

Console.WriteLine("Free Bytes Available:  {0,15:D}", FreeBytesAvailable); 
Console.WriteLine("Total Number Of Bytes:  {0,15:D}", TotalNumberOfBytes); 
Console.WriteLine("Total Number Of FreeBytes: {0,15:D}", TotalNumberOfFreeBytes); 
+0

謝謝,這似乎工作! – LEM

+0

直到我無意中使用「C:\\」 'success = GetDiskFreeSpaceEx(「C:\\」,out FreeBytesAvailable,...' –

+1

@ J.Chris您錯過了@之前的@符號第一個報價,這使得掩碼過時 – rekire

相關問題