Français
C ++ Forum

Problem avec DiskFree/DiskSize & GetDiskFreeSpace

 

Michael
Dell
allô Sebastian,

hab là un kleines Problem entdeckt et zwar dans allen Versionen de Prf2Cpp.
cela ganze betrifft qui Funktionen DiskFree/DiskSize sowie qui API GetDiskFreeSpaceExA.

DiskFree/DiskSize fonctionne sur WinXP prima mais pas sur Win98.
GetDiskFreeSpaceExA fonctionne sur beiden Systemen pas. (vermute cela es quoi avec qui Byte Funktion trop 1faire hat.)

ici un Demo:
KompilierenMarqueSéparation
!Def GFDS_lwTyp(1)          SubStr$(LW_Typ($(1)),2,">  ")
Def GFDS_DskSpaceGesamt(1) Val(SubStr$(SubStr$($(1),2,"|||"),1,"||"))
Def GFDS_DskSpaceFrei(1)   Val(SubStr$(SubStr$($(1),2,"|||"),2,"||"))
Def GFDS_DskSpaceBelegt(1) Val(SubStr$(SubStr$($(1),2,"|||"),3,"||"))

Proc ShowIt

    Parameters txt$
    Print
    Print SubStr$(txt$,1,"|||")
    Print ("      "+Format$("###,##0.00",Round(Div(GFDS_DskSpaceGesamt(txt$),1000000),2))+"  Mb  gesamt")
    Print ("      "+Format$("###,##0.00",Round(Div(GFDS_DskSpaceFrei(txt$),1000000),2))+"  Mb  frei")
    Print ("      "+Format$("###,##0.00",Round(Div(GFDS_DskSpaceBelegt(txt$),1000000),2))+"  Mb  belegt")
    Print
    Print

EndProc

Proc LW_Typ

    Parameters LW$
    Def LaufwerksTyp(1)       !"KERNEL32.DLL","GetDriveTypeA"
    Declare LW#,LW_Typ&
    Dim LW#,Add(Len(LW$),1)
    String LW#,0 = LW$
    LW_Typ& = LaufwerksTyp(LW#)
    Dispose LW#
    Case Equ(LW_Typ&,0): Return LW$+">  keine Ahnung"
    Case Equ(LW_Typ&,1): Return LW$+">  nicht vorhanden"
    Case Equ(LW_Typ&,2): Return LW$+">  Diskette"
    Case Equ(LW_Typ&,3): Return LW$+">  Festplatte"
    Case Equ(LW_Typ&,4): Return LW$+">  Netz Laufwerk"
    Case Equ(LW_Typ&,5): Return LW$+">  CD/DVD"
    Case Equ(LW_Typ&,6): Return LW$+">  RAM"
    Return "Fehler!"

EndProc

Proc GetDiskFreeSpace

    Parameters gDS_LW$
    Declare Gesamt!,Belegt!,gFrei!
    Clear Gesamt!,Belegt!,gFrei!
    gDS_LW$ = (Left$(gDS_LW$,3) + Chr$(0))
    DiskFree(gDS_LW$)
    DiskSize(gDS_LW$)
    Gesamt! = DiskSize(gDS_LW$)
    gFrei!  = DiskFree(gDS_LW$)
    Belegt! = (Gesamt! - gFrei!)
    Return (GFDS_lwTyp(gDS_LW$)+"|||"+ Str$(Gesamt!) + "||" + Str$(gFrei!) + "||" + Str$(Belegt!))

EndProc

Proc old_GetDiskFreeSpace

    Parameters Path$
    Declare LWtyp$
    Def GetDiskFreeSpaceEx(4) !"KERNEL32.DLL","GetDiskFreeSpaceExA"
    Def x!(8) (((((((%(8)*256+%(7))*256+%(6))*256+%(5))*256+%(4))*256+%(3))*256+%(2))*256+%(1))
    Declare Path#,AvBytes#,TotalBytes#,FreeBytes#,frei!,gesamt!,avb!,erg$
    Dim Path#,255
    Dim AvBytes#,8
    Dim TotalBytes#,8
    Dim FreeBytes#,8
    String Path#,0 = Path$
    GetDiskFreeSpaceEx(Path#,AvBytes#,TotalBytes#,FreeBytes#)
    gesamt! = x!(Byte(TotalBytes#,0),Byte(TotalBytes#,1),
    Byte(TotalBytes#,2),Byte(TotalBytes#,3),
    Byte(TotalBytes#,4),Byte(TotalBytes#,5),
    Byte(TotalBytes#,6),Byte(TotalBytes#,7))
    frei!   = x!(Byte(FreeBytes#,0),Byte(FreeBytes#,1),
    Byte(FreeBytes#,2),Byte(FreeBytes#,3),
    Byte(FreeBytes#,4),Byte(FreeBytes#,5),
    Byte(FreeBytes#,6),Byte(FreeBytes#,7))
    avb!    = Sub(gesamt!,frei!)
    gesamt! = Round(gesamt!,0)
    frei!   = Round(frei!,0)
    avb!    = Round(avb!,0)
    erg$ = "|||"+Str$(gesamt!)+"||"+Str$(frei!)+"||"+Str$(avb!)
    erg$ = GFDS_lwTyp(Path$) + erg$
    Dispose AvBytes#
    Dispose TotalBytes#
    Dispose FreeBytes#
    Dispose Path#
    Return erg$

EndProc

**** Programm- Source ****
Cls
Print "Mit qDiskFree/DiskSizeq"
ShowIt(GetDiskFreeSpace("C:"))
ShowIt(GetDiskFreeSpace("D:"))
Print "Mit qGetDiskFreeSpaceExAq"
ShowIt(old_GetDiskFreeSpace("C:"))
ShowIt(old_GetDiskFreeSpace("D:"))
WaitInput
Fin
 
Salu Michael...

Hab zwar krumme Fieß awer dofir e' ecklich Gsicht! 
28.08.2006  
 




Sebastian
König
allô Michael,

merci pour den Hinweis et den Testcode!

cela Problem chez qui variante avec GetDiskFreeSpaceExA() liegt beim Aufruf qui Funktion x!(): C++ benutzt là zur Berechnung aucun Fließkomma-Arithmetik mais simple Integer. malheureusement peux on cela pas so simple changement, là es sich arrêt um une reinen Integer-Ausdruck handelt. il y a mais glücklicherweise une très einfachen Workaround : si Du dans qui DEFinition simple @!() statt @%() verwendest, sollte es sowohl avec XProfan comme aussi avec Profan2Cpp richtig marcher...

à cause de qui l'affaire avec DiskFree/DiskSize melde je mich später nochmal

MfG

Sebastian
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
28.08.2006  
 




Michael
Dell
merci, cela funktioniert

le moi cela encore pas Geschnallt hab, je sollte mich wohl plus konzentrieren.
 
Salu Michael...

Hab zwar krumme Fieß awer dofir e' ecklich Gsicht! 
28.08.2006  
 




Sebastian
König
[quote-part:1b6b11ce43]merci, cela funktioniert [/quote-part:1b6b11ce43]
Ok, super

maintenant trop dem anderen Problem: comme Ursache vermute je, dass je dans meiner Implementierung de DiskFree() seulement merci, cela funktioniert GetDiskFreeSpace() benutze. en supplément steht dans qui Remarks-Sektion im MSDN, dass es sous Win95/98 Probleme avec Laufwerkskapazitäten > 2GB gibt... dans qui prochain Beta-Version (qui je wohl demain hochladen werde) werde je cela la fois sur GetDiskFreeSpaceEx() ajuster...

MfG

Sebastian
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
28.08.2006  
 




Sebastian
König
allô Michael,

justement habe je Version 1.5.9f hochgeladen (et aussi à cette Beitrag angehängt ). marcher @DiskFree() et @DiskSize() avec cela maintenant aussi sous Windows 98 korrekt?

MfG

Sebastian

2.777 kB
Hochgeladen:29.08.2006
Downloadcounter51
Download
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
29.08.2006  
 




Michael
Dell
allô Sebastian,

fonctionne Prima!!! merci
 
Salu Michael...

Hab zwar krumme Fieß awer dofir e' ecklich Gsicht! 
30.08.2006  
 



répondre


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

2.324 Views

Untitledvor 0 min.

Themeninformationen

cet Thema hat 2 participant:

Sebastian König (3x)
Michael Dell (3x)


Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie