AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Laufwerkgrössen ermitteln

Ein Thema von Delbor · begonnen am 21. Okt 2021 · letzter Beitrag vom 29. Okt 2021
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.326 Beiträge
 
Delphi 12 Athens
 
#1

AW: Laufwerkgrössen ermitteln

  Alt 22. Okt 2021, 03:27
Ja, das ist bissl verwirrend, aber auch recht einfach.

Laufwerke haben zwar eine ID (GUID), aber diese Laufwerksnummer hier ist einfach nur stumpf durchgezählt ... ich denke mal, das ist noch ein Überbleibsel aus DOS.


A = 0
B = 1
C = 2
usw.
Code:
* das Laufwerk
    * dein I
      * der richtige Index
C:\ 0 2
D:\ 1 3
E:\ 2 4
S:\ 3 18

Chr(i+64) entspricht einem Chr(i + Ord('A')) (binär ist es das Selbe ... nur das eine ist etwas Verständlicher)
und siehe oben, andersrum kann man auch aus einem Laufwerksbuchstaben die Laufwerksnummer berechnen, also Ord(C) - Ord('A') .

Wofür die Nummer allerdings gut ist, das sieht man an MSDN-Library durchsuchenGetLogicalDrives, weches ein DWORD zurückgibt, bzw. quasi ein set of 0..31 .
Aber als set of 'A'..'Z' (eigentlich set of 'A'..'`' , da ja mehr Felder, als Buchstaben), wäre es wieder verständlicher gewesen.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (22. Okt 2021 um 12:44 Uhr)
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.192 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Laufwerkgrössen ermitteln

  Alt 22. Okt 2021, 14:39
Hi zusammen

Vor einiger Zeit hab ich auch das noch gefunden und hab mir die Demo dazu gleich mal gedownloaded. Die Grössenangaben zu einer ausgewählten Disk stimmen allerdings nicht im entferntesten. Nachvollziehen, wieso das so ist, konnte ich bislang nicht.

Im Moment komme ich jedenfalls keinen Schritt weiter.

Gruss
Delbor
Angehängte Grafiken
Dateityp: jpg 14_22_32-Vol_Info - Delphi 10.4 - Main [wird ausgeführt] [Erzeugt].jpg (31,8 KB, 39x aufgerufen)
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.554 Beiträge
 
Delphi 7 Professional
 
#3

AW: Laufwerkgrössen ermitteln

  Alt 22. Okt 2021, 15:37
Es dürfte sich um ein Festplatte mit ca. 4 TB handeln.

Fraglich ist halt, ob man zur Berechnung die

1. Variante
1 kb = 1024 Byte
1 mb = 1024 kb
1 gb = 1024 mb
1 tb = 1024 gb

oder die

2. Variante
1 kb = 1000 Byte
1 mb = 1000 kb
1 gb = 1000 mb
1 tb = 1000 gb

nutzt.

Das von Dir gefundene Programm nutzt die zweite Variante und die Abweichungen gegenüber der ersten sind im Terrabytebereich dann schon mal nicht eben so ganz unerheblich.

Statt
Delphi-Quellcode:
  Label11.Caption := FormatFloat('0.00', (SectPerCls * BytesPerCls *
                                          TotCls)/1000000) + ' MB';
  Label12.Caption := FormatFloat('0.00', (SectPerCls * BytesPerCls *
                                          FreeCls)/1000000) + ' MB';
mal mit
Delphi-Quellcode:
  Label11.Caption := FormatFloat('0.00', (SectPerCls * BytesPerCls *
                                          TotCls) / (1024 * 1024)) + ' MB';
  Label12.Caption := FormatFloat('0.00', (SectPerCls * BytesPerCls *
                                          FreeCls) / (1024 * 1024)) + ' MB';
probieren. Entsprechen die Ergebnisse dann eher Deinen Vorstellungen?

Das Betriebssysteme nutzt die erste Variante.
Festplattenhersteller nutzen für die Kapazitätsangaben gerne die zweite Variante.

Durch diesen "Rechenunterschied" hat eine 1 TB-Platte mit Herstellerangaben nach Variante 2 beim Betriebssystem dann "nur noch" eine Kapazität von 909,49 GB.
Bei einer 4 TB-Platte bleiben dann "nur noch" 3,64 TB übrig (ergibt eine Abweichung von etwa 9%).

Zitat von Delbor:
Die Grössenangaben zu einer ausgewählten Disk stimmen allerdings nicht im entferntesten.
Bechreib' doch einfach mal, was Du erwartest und was angezeigt wird.
Hätte den Vorteil, dass man eine Vorstellung vom Fehler (und seiner Größenordnung) bekommen könnte.
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.192 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Laufwerkgrössen ermitteln

  Alt 22. Okt 2021, 16:41
Hi Delphi.Narium

Es dürfte sich um ein Festplatte mit ca. 4 TB handeln.
Ich geh mal davon aus, dass du dich auf die obige Abbildung des Programms und die Auswahl von "D:\OfficeDisk" beziehst - Besagtes Volume ist eine Partition mit einer Gesamtgrösse von 24.9 GB und befindet sich eigentlich auf "F:\DatabaseDisk" (2TB); Eine weitere Partition ist "E:\Developerdisk" mit einer Grösse von 149 GB, ebenfalls auf "F:\".

@himitsu:
Delphi-Quellcode:
* das Laufwerk
    * dein I
      * der richtige Index
C:\ 0 2
D:\ 1 3
E:\ 2 4
S:\ 3 18
Wenn ich das richtig interpretiere, sollte ich das Array zB. mit einer Whileschleife durchlaufen können und erst ab dem 2.Index reagieren. Soweit nicht wirklich unverständlich - das letzte Element bliebe so oder so nach diesem Beispiel Laufwerk S.
Die Sache scheint mir aber einen Haken zu haben: Die Laufwerke, die statt einer Grössenangabe ein '-1' ausweisen, befinden sich so oder so mitten im Array.

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.192 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Laufwerkgrössen ermitteln

  Alt 23. Okt 2021, 19:15
Hi zusammen

Inzwischen hab ich auch noch weiter gesucht, auch in Sachen Bit&Byte-Umrechnung und versucht, mit der gefundenen Demo auf 'einen grünen Zweig' zu kommen. Was ich dabei gefunden habe: GetDiskFreeSpace ist offenbar veraltet. Zumindest hab ich im Embarcadero-Wikki vergebens danach gesucht. Hingegen hab ich eine Bool-Funktion GetDiskFreeSpaceEx gefunden, allerdings bisher nicht aufrufen können.
Mal zum Vergleich die gefundene Anwendung und die Anzeige des Explorers:
14_22_32-Vol_Info - Delphi 10.4 - Main 3.jpg
Explorer.jpg
Der Code zu der Ausgabe dieses Programmes:

Delphi-Quellcode:
  GetDiskFreeSpace(PChar(drv), SectPerCls, BytesPerCls, FreeCls, TotCls);
  Showmessage( 'SectPerCls := ' + IntToStr(SectPerCls) + sLineBreak +
               'BytesPerCls := ' + IntToStr(BytesPerCls) + sLineBreak +
               ' FreeCls := ' + IntToStr(FreeCls) + sLineBreak +
               ' TotCls := ' + IntToStr(TotCls));

  Label11.Caption := FormatFloat('0.00', (SectPerCls * BytesPerCls * TotCls)/(1024*1024*1024)) + ' GB';

  Label12.Caption := FormatFloat('0.00', (SectPerCls * BytesPerCls * FreeCls)/(1024*1024*1024)) + ' GB';
...und ShowMessage:

ShowMessageDlg 1.jpg

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.326 Beiträge
 
Delphi 12 Athens
 
#6

AW: Laufwerkgrössen ermitteln

  Alt 23. Okt 2021, 19:21
Das sucht man auch nicht im Delphi, sondern beim Hersteller.
MSDN-Library durchsuchenGetDiskFreeSpace
MSDN-Library durchsuchenGetDiskFreeSpaceEx

Und wenn eine API noch nicht im Delphi drin ist, dann entweder einen fremden API-Header suchen (z.B. JEDI)
oder einfach selbermachen ... steht ja beim Hersteller, wie es aussehen muß. (braucht man nur noch von C++ nach Pascal/Delphi zu übersetzen)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.554 Beiträge
 
Delphi 7 Professional
 
#7

AW: Laufwerkgrössen ermitteln

  Alt 23. Okt 2021, 20:24
Inzwischen hab ich auch noch weiter gesucht, auch in Sachen Bit&Byte-Umrechnung und versucht, mit der gefundenen Demo auf 'einen grünen Zweig' zu kommen.
Das Problem der Demo ist: Altes Delphi und (vor allem) alte API-Funktionen, die nur bei Werten bis 2 GB richtig arbeiten. Alles, was über den Maximalwert von Integer (2147483647) hinausgeht, scheitert. Und durch diverse Überläufe beim Umgang, rechnen, ... mit diesen Werten, kommen mehr oder weniger (realitätsferne, kaum nachvollziehbare Pseudo-) Zufallswerte dabei heraus.
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.192 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Laufwerkgrössen ermitteln

  Alt 23. Okt 2021, 22:57
Hi zusammen

In Sachen GetDiskFreeSpaceEx hab ich noch ganz was interessantes gefunden

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz