Hard drive Space

Anfängerfragen zum Programmieren mit PureBasic.
maupa
Beiträge: 105
Registriert: 12.12.2004 12:17

Hard drive Space

Beitrag 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")

Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Hard drive Space

Beitrag 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:
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
maupa
Beiträge: 105
Registriert: 12.12.2004 12:17

Re: Hard drive Space

Beitrag von maupa »

Hi,
OK hab Verstanden was du meinst und hat Sin, nu Bekomme ich bei Zweite Berechnung Zeigt 0


Danke
MAUPA
Andreas21
Beiträge: 390
Registriert: 30.08.2004 09:05
Computerausstattung: Desktop
Windows 10 Pro x64
CPU: AMD Ryzen 5 2600 3.40 GHz
Ram: 16GB RAM
Grafik: NVIDA Geforce 1060
PB: 5.72 X86/X64
Wohnort: Heidelberg

Re: Hard drive Space

Beitrag 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
Windows 10 x64 Pro - PB 5.61 X64 / x32 - PB 4.6 x32
maupa
Beiträge: 105
Registriert: 12.12.2004 12:17

Re: Hard drive Space

Beitrag 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
Antworten