我試圖找出有關卷的可用空間信息。那些分配的字母是好的(GetDiskFreeSpaceEx)。我也連接到VDS(虛擬磁盤服務),並取回一些所謂AvailableAllocationUnits(A)和AllocationUnitSize(B),其中A * B =免費大小由Windows中。但是B是4096,所以這不是一個確切的字節數。如何獲得未分配字母的磁盤捲上的可用空間?
- 如何在沒有VDS的情況下確定此問題?
- 是否有更精確的方法(以字節爲單位)?
問候,
凱特
我試圖找出有關卷的可用空間信息。那些分配的字母是好的(GetDiskFreeSpaceEx)。我也連接到VDS(虛擬磁盤服務),並取回一些所謂AvailableAllocationUnits(A)和AllocationUnitSize(B),其中A * B =免費大小由Windows中。但是B是4096,所以這不是一個確切的字節數。如何獲得未分配字母的磁盤捲上的可用空間?
問候,
凱特
在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。
嗨,謝謝你的回答,我從那以後發現VDS實際上確實返回了一個正確的數字。 「四捨五入」的數字實際上是正確的。所以你可以使用乾淨的方式,而不用擔心。即使在你的例子中,數字也是4096的倍數(或者精確地說AllocationUnitSize)。但我會接受你的答案,因爲這是答案。無論如何,人們都可以閱讀評論。 – SmartK8 2015-01-10 10:48:30
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
嗨,DriveInfo就是不行。它甚至不知道這些卷。我正在談論沒有GUID訪問字的卷(如\\?\ GLOBALROOT \ Device \ HarddiskVolume15)。 4096舍入會很好(如果更高的精度不可能像1字節的精度),但我需要確定如果可能的話沒有VDS。 – SmartK8 2012-04-02 11:06:15
對不起,我從來沒有回到你身邊。你是對的。謝謝。 – SmartK8 2015-01-10 10:49:17