2012-04-02 68 views
3

我試圖找出有關卷的可用空間信息。那些分配的字母是好的(GetDiskFreeSpaceEx)。我也連接到VDS(虛擬磁盤服務),並取回一些所謂AvailableAllocationUnits(A)和AllocationUnitSize(B),其中A * B =免費大小由Windows中。但是B是4096,所以這不是一個確切的字節數。如何獲得未分配字母的磁盤捲上的可用空間?

  1. 如何在沒有VDS的情況下確定此問題?
  2. 是否有更精確的方法(以字節爲單位)?

問候,
凱特

+1

http://stackoverflow.com/questions/412632/how-do-i-retrieve-disk-information-in-c爲什麼你認爲4096不是確切的字節數? 4096字節是4KB(每KB使用1024字節) – ChrisPatrick 2012-04-02 10:53:08

+0

嗨,DriveInfo就是不行。它甚至不知道這些卷。我正在談論沒有GUID訪問字的卷(如\\?\ GLOBALROOT \ Device \ HarddiskVolume15)。 4096舍入會很好(如果更高的精度不可能像1字節的精度),但我需要確定如果可能的話沒有VDS。 – SmartK8 2012-04-02 11:06:15

+0

對不起,我從來沒有回到你身邊。你是對的。謝謝。 – SmartK8 2015-01-10 10:49:17

回答

1

在Windows上,你可以執行以下命令,並解析輸出:

vssadmin list volumes 

這給:

C:\Windows\system32>vssadmin list volumes 
vssadmin 1.1 - Volume Shadow Copy Service administrative command-line tool 
(C) Copyright 2001-2013 Microsoft Corp. 

Volume path: \\?\Volume{66c6160d-60cc-11e3-824b-806e6f6e6963}\ 
    Volume name: \\?\Volume{66c6160d-60cc-11e3-824b-806e6f6e6963}\ 
Volume path: D:\ 
    Volume name: \\?\Volume{66c6160f-60cc-11e3-824b-806e6f6e6963}\ 
Volume path: C:\ 
    Volume name: \\?\Volume{66c6160e-60cc-11e3-824b-806e6f6e6963}\ 

然後執行

fsutil volume diskfree 

其中給出:

C:\Users\MC>fsutil volume diskfree \\?\Volume{66c6160e-60cc-11e3-824b-806e6f6e6963}\ 
Total # of free bytes  : 47826694144 
Total # of bytes    : 255691059200 
Total # of avail free bytes : 47826694144 

要讀取一個shell進程的輸出,你可以閱讀標準輸出

string output = proc.StandardOutput.ReadToEnd(); 

免責聲明:是的,我知道它不是完全乾淨的方式,但它是一種方式。因爲我不知道用於訪問這種低級別信息的API。

+1

嗨,謝謝你的回答,我從那以後發現VDS實際上確實返回了一個正確的數字。 「四捨五入」的數字實際上是正確的。所以你可以使用乾淨的方式,而不用擔心。即使在你的例子中,數字也是4096的倍數(或者精確地說AllocationUnitSize)。但我會接受你的答案,因爲這是答案。無論如何,人們都可以閱讀評論。 – SmartK8 2015-01-10 10:48:30