2012-04-02 12 views
3

Ich versuche, Informationen zum freien Speicherplatz über Volumes zu finden. Diejenigen mit Buchstaben sind in Ordnung (GetDiskFreeSpaceEx). Ich habe auch zu VDS (Virtual Disk Service) und abgerufen etwas namens AvailableAllocationUnits (A) und AllocationUnitSize (B) verbunden sind, wobei A * B = freie Größe die von Windows angezeigt. Aber B ist 4096, also ist dies keine exakte Anzahl in Bytes.Wie erhält man Speicherplatz auf einem Laufwerk ohne zugewiesenen Buchstaben?

  1. Wie ist es möglich, dies ohne VDS zu bestimmen?
  2. Gibt es einen präziseren Weg (in Bytes)?

Grüßen,
Kate

+1

http://stackoverflow.com/questions/412632/how-do-i-retrieve-disk-information-in-c und warum denkst du 4096 ist keine genaue Anzahl von Bytes? 4096 Bytes ist 4 KB (mit 1024 Bytes pro KB) – ChrisPatrick

+0

Hallo, DriveInfo wird einfach nicht tun. Es weiß nicht einmal über diese Bände. Ich spreche über Datenträger ohne Briefzugriff durch GUID (wie \\? \ GLOBALROOT \ Device \ HarddiskVolume15). Die 4096-Rundung wäre in Ordnung (wenn mehr Genauigkeit nicht möglich ist wie 1 Byte Genauigkeit), aber ich muss das ohne VDS nach Möglichkeit bestimmen. – SmartK8

+0

Sorry, ich bin nie zu dir zurückgekommen. Du hast recht. Vielen Dank. – SmartK8

Antwort

1

Unter Windows können Sie die folgenden Befehle ausführen und die Ausgabe analysieren:

vssadmin list volumes 

Das gibt:

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}\ 

Dann Execute

fsutil volume diskfree 

Welche gibt:

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 

Zum Lesen Ausgabe eines Shell-Prozess, können Sie die Standardausgabe

string output = proc.StandardOutput.ReadToEnd(); 

HAFTUNGSAUSSCHLUSS lesen: Ja ich es nicht genau die sauberste Art und Weise kennen, aber es ist Weg. Da mir keine API für den Zugriff auf solche Low-Level-Informationen bekannt ist.

+1

Hallo, danke für die Antwort Ich habe seither festgestellt, dass VDS tatsächlich wirklich eine korrekte Nummer zurückgibt. Die "gerundete" Zahl ist tatsächlich die richtige. So können Sie saubere Art und Weise verwenden und sich nicht sorgen. Auch in Ihrem Beispiel sind die Zahlen Vielfache von 4096 (oder genauer: AllocationUnitSize). Aber ich werde deine Antwort akzeptieren, weil es eine Antwort ist. Die Leute können die Kommentare trotzdem lesen. – SmartK8