Seite 1 von 1

Hard drive Space

Verfasst: 28.08.2013 22:35
von maupa
Hi,
Irgendwie hab ich Berechnung Probleme mit Festplatten große. Habe zwei Wege ausprobiert um Byte Berechnung zu machen, jedoch beide Stimmen nicht mit Windows Eigenschaften Überein.
Berechnung 1 Stimmt überein mit USB Stick, sobald ich aber Harddisk zur Berechnung auswähle stimmt Berechnung 1 auch nicht mehr.
Hat wer eine Lösung für das Problem?

Fetten Danke Maupa

Code: Alles auswählen

;Erste Berechnung Resultat = Rechnung1
Procedure.d GetDiskFreeSpaceDynamic(Drive$) 
   Protected Result.d = -1, BytesFreeToCaller.q, TotalBytes.q, TotalFreeBytes.q
      GetDiskFreeSpaceEx_(@Drive$, @BytesFreeToCaller, @TotalBytes, @TotalFreeBytes)
      Result = TotalBytes
      ProcedureReturn Result
    EndProcedure
Drive$   = "i:\"
FreeMB.l = 0
FreeMB   = GetDiskFreeSpaceDynamic(Drive$)
Rechnung1= Val(StrD(FreeMB, 8))

;Zweite Berechnung Resultet = rechnung2
If GetDiskFreeSpace_("i:\", @SectorsperCluster.l, @BytesPerSector.l, @FreeClusters.l, @TotalClusters.l)
  Rechnung2 = Val(Str(BytesPerSector)) *Val(Str(FreeClusters)) * Val(Str(TotalClusters))
EndIf
   MessageRequester (" Output",    "Rechnung 1: " + Rechnung1 + " Byte "+"/ Rechnung 2: " + Rechnung2 + " Byte")


Re: Hard drive Space

Verfasst: 28.08.2013 22:51
von STARGÅTE
Wozu ist:

Code: Alles auswählen

Val(Str(BytesPerSector))
BytesPerSector ist bereits eine Zahl, wieso machst du darauf ein String und wieder eine Zahl?

Warum rechnest du FreeClusters * TotalClusters ??
FreeClusters gibt dir doch gerade an, wie viele Frei sind, und TotalClusters wie viele es überhaupt gibt.
Du willst bestimmt SectorsperCluster multiplizieren.

Bei Rechung 1 schreibst du den Freien Speicher in eine Long (FreeMB.l)
Da die Festplatte aber mehr als 2GB haben wird, gibt es dort einen Überlauf, nutze dort auch Quads!

Der Rückgabewert von GetDiskFreeSpaceDynamic() ist eine Double? genauso quatsch, dadurch wird die Zahl nur ungenau!

hier der neue Code:

Code: Alles auswählen

;Erste Berechnung Resultat = Rechnung1
Procedure.q GetDiskFreeSpaceDynamic(Drive$) 
	Protected BytesFreeToCaller.q, TotalBytes.q, TotalFreeBytes.q
	SetErrorMode_(#SEM_FAILCRITICALERRORS)
	GetDiskFreeSpaceEx_(@Drive$, @BytesFreeToCaller, @TotalBytes, @TotalFreeBytes)
	SetErrorMode_(0)
	ProcedureReturn BytesFreeToCaller
EndProcedure

Drive$   = "Q:\"
Define Rechnung1.q = GetDiskFreeSpaceDynamic(Drive$)
Define Rechnung2.q

;Zweite Berechnung Resultet = rechnung2
If GetDiskFreeSpace_("Q:\", @SectorsperCluster.l, @BytesPerSector.l, @FreeClusters.l, @TotalClusters.l)
	Rechnung2 = BytesPerSector * SectorsperCluster * FreeCluster
EndIf
MessageRequester (" Output",    "Rechnung 1: " + Rechnung1 + " Byte "+"/ Rechnung 2: " + Rechnung2 + " Byte")

Kam mir ein wenig vor wie: "Finde die 10 Fehler im oberen Code" :lol:

Re: Hard drive Space

Verfasst: 28.08.2013 23:00
von maupa
Hi,
OK hab Verstanden was du meinst und hat Sin, nu Bekomme ich bei Zweite Berechnung Zeigt 0


Danke
MAUPA

Re: Hard drive Space

Verfasst: 28.08.2013 23:25
von Andreas21
Bei mir kommt es fast hin.

Code: Alles auswählen

Define BytesFreeToCaller.i, TotalBytes.i, TotalFreeBytes.i

Drive$ = "C:\"

GetDiskFreeSpaceEx_(@Drive$, @BytesFreeToCaller, @TotalBytes, @TotalFreeBytes)

Debug "BytesFreeToCaller: " + BytesFreeToCaller
Debug "TotalBytes: " + TotalBytes
Debug "TotalFreeBytes: " + TotalFreeBytes

; BytesFreeToCaller: 38670950400
; TotalBytes: 81602277376
; TotalFreeBytes: 38670950400

; C:\ info
; Belegter Speicher: 42.931.585.024 Bytes
; Freier Speicher:   38.670.692.352 Bytes

Re: Hard drive Space

Verfasst: 28.08.2013 23:34
von maupa
THX
Ja die erste Berechnung Lief ja nach der Korrektur.
Die Zweite aber nicht nu hab ich dem Fehler gefunden..

Code: Alles auswählen

;Erste Berechnung Resultat = Rechnung1
Procedure.q GetDiskFreeSpaceDynamic(Drive$)
   Protected BytesFreeToCaller.q, TotalBytes.q, TotalFreeBytes.q
   SetErrorMode_(#SEM_FAILCRITICALERRORS)
   GetDiskFreeSpaceEx_(@Drive$, @BytesFreeToCaller, @TotalBytes, @TotalFreeBytes)
   SetErrorMode_(0)
   ProcedureReturn TotalBytes
EndProcedure

Define Drive$   = "c:\"
Define Rechnung1.q = GetDiskFreeSpaceDynamic(Drive$)
Define Rechnung2.q


;Zweite Berechnung Resultet = rechnung2
If GetDiskFreeSpace_(Drive$, @SectorsperCluster.q, @BytesPerSector.q, @FreeClusters.q, @TotalClusters.q)
   Rechnung2 = BytesPerSector * TotalClusters * SectorsperCluster
EndIf
MessageRequester (" Output",    "Rechnung 1: " + Rechnung1 + " Byte "+"/ Rechnung 2: " + Rechnung2 + " Byte ")
Gruß und danke für Hilfe
MAUPA