2k Aufrufe
Gefragt in WindowsXP von
Hi!

Ich hab schon wieder ein komisches PSI-Phänomen entdeckt. Aber mal von Anfang an:
Ich schreibe gerade ein VBScript, das die Blockgrösse eines Dateisystems ermitteln muss. Bis jetzt ist mir dafür nichts Dümmeres eingefallen, als den freien Speicherplatz vor und nach dem Erstellen einer 1 Byte grossen Datei zu vergleichen. Natürlich ist das Murks und störanfällig, wenn ein anderer Prozess gleichzeitig auf das Laufwerk zugreift. Wenn jemand eine bessere Methode kennt - sehr gerne!

OK, zurück zum Thema. Eine 1 Byte grosse Datei belegt ja mehr als nur ein Byte, sondern einen ganzen Block. Unter FAT32 funktioniert diese Methode, um die Blockgrösse zu ermitteln. Nun habe ich es auch unter NTFS probiert, aber da geht es nicht.

Wenn ich unter NTFS eine 1 Byte grosse Datei erzeuge, dann sagt der Explorer unter Eigenschaften zwar, dass diese 4096 Byte belegt, aber unter Eigenschaften des Laufwerks ändert sich durch das Anlegen einer solchen Datei nicht der zur Verfügung stehende Speicherplatz. Kapier ich mal wieder nicht. Würde mich über Aufklärung freuen.

Danke!

8 Antworten

0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
...NTFS speichert sehr kleine Daten in der MTF selbst - und diese hat stets bereits reservierten Platz. Daher "wächst" auch nicht der Bestand auf dem Laufwerk.

Was du willst, liefert die die Win32-API-Funktion GetDiskFreeSpace(). Der Parameter lpSectorsPerCluster (meist 8) wird mit lpBytesPerSector (meist 512) multipliziert und du hast deine Blockgröße.
0 Punkte
Beantwortet von
Ah, ok. Danke!

Aber wie komm ich mit einem WSH-Script an die API-Funktionen ran?
0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Keine Ahnung - vielleicht kannst du die Ausgabe folgendes Kommandos entsprechend auswerten:
fsutil fsinfo ntfsinfo c:
0 Punkte
Beantwortet von luke_filewalker Experte (3.3k Punkte)
Hi

son_quatsch hat die beste Möglichkeit in A1 geposted. Damit lässt sich das direkt abfragen ohne sich so "verrenken" zu müssen. Leider kann VBScript nicht direkt mit APIs umgehen. Es "soll" aber wohl doch über einen Umweg gehen. Prinzipiell würde es sich lohnen da weiter zu recherchieren. Denn gerade die API eröffnet einem eine ganze neue Windows-Programmier-Welt.
0 Punkte
Beantwortet von
Danke, erstmal! Ich hab den Tip noch nicht ausprobiert, weil mir jetzt was dazwischen gekommen ist. und ich auch grad kein NT-Windows da habe. Ich meld mich noch mal, wenn ichs umgesetzt habe.

Was du, Luke, im Hinterkopf hast, ist wahrscheinlich, dass Microsoft damals im Internettechnologiewettbewerb von ActiveX mit Java seine Felle hat davonschwimmen sehen und man dann VB5 zum kostenlosen Download zur Verfügung gestellt hat, um die eigene Technologie zu unterstützen. Hat aber wohl nicht geklappt. Jedenfalls war diese Version, so weit ich weiss, voll funktionsfähig, bis auf die Einschränkung, dass man keine EXE-Dateien erzeugen konnte, sondern nur OCX, also ActiveX-Controls. Wenn man das fürs Scripting registriert, kann man es aus WSH-Skripten ansprechen.

Ist für mich aber keine Alternative, da 1. ich erstmal ein bisschen VB lernen müsste, 2. erstmal suchen müsste, wo ich das Installationsfile verloren habe und dann müsste das Ding ja auch 3. auf jedem Rechner installiert werden, damit das Script läuft.

Da ich son_quatsch als kompetenten Helfer kenne, denk ich dass sein Vorschlag funzen wird. :)
0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Die Funktion ist auch unter Win95 sowie dessen Geschwistern schon verfügbar.
0 Punkte
Beantwortet von luke_filewalker Experte (3.3k Punkte)
@PSI-User
Nein, das (VB) hatte ich nicht im Hinterkopf sondern tatsächlich VBS. Dafür gibt es wohl einen Wrapper der APIs unter VBS zugänglich machen soll. Aber ist auch egal. Der Weg in A3 mit FSUTIL dürfte der einfachste sein.
0 Punkte
Beantwortet von
Nein, das (VB) hatte ich nicht im Hinterkopf sondern tatsächlich VBS.

VBS kann es nicht sein, sondern nur ActiveX. Ob durch VB oder eine andere Sprache erzeugt, macht ja nicht den Unterschied.

Laut Google meinst du wahrscheinlich das wshAPIToolkit von Clarence Washington Jr.. Der hat seinen Laden allerdings leider dicht gemacht.

Die Abfrage funktioniert jetzt. Vielen Dank!
...