Español
C ++ Foro

Problema con DiskFree/DiskSize & GetDiskFreeSpace

 

Michael
Dell
¡Hola Sebastian,

tener como una kleines Problema entdeckt y zwar en allen Versionen de Prf2Cpp.
Das todo betrifft el Características DiskFree/DiskSize sowie el API GetDiskFreeSpaceExA.

DiskFree/DiskSize se ejecuta en WinXP prima pero no en Win98.
GetDiskFreeSpaceExA se ejecuta en beiden Systemen no. (vermute el lo qué con el Byte Función a tun ha.)

Hier una Demo:
KompilierenMarcaSeparación
!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
End
 
Salu Michael...

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




Sebastian
König
¡Hola Michael,

danke para el Referencia y el Testcode!

Das Problema en Variante con GetDiskFreeSpaceExA() liegt beim Aufruf el Función x!(): C++ benutzt hay a Berechnung no Fließkomma-Arithmetik pero simplemente Integer. Leider puede ser el no así simplemente ändern, como lo sólo en una reinen Integer-Ausdruck es. Lo son aber glücklicherweise una muy einfachen Workaround : Si usted en el DEFinition simplemente @!() en lugar de @%() verwendest, debería lo sowohl con XProfan como auch con Profano2Cpp correcto trabajo...

Wegen el Sache con DiskFree/DiskSize melde Yo mich später otra vez

MfG

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




Michael
Dell
Gracias, el funktioniert

Das Yo el ya otra vez no Geschnallt tener, Yo debería mich wohl mehr konzentrieren.
 
Salu Michael...

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




Sebastian
König
[quote:1b6b11ce43]Gracias, el funktioniert [/quote:1b6b11ce43]
Ok, super

Jetzt a el otro Problema: Als Ursache vermute Yo, dass Yo en meiner Implementierung de DiskFree() sólo Gracias, el funktioniert GetDiskFreeSpace() benutze. Dazu es en el Remarks-Sektion en el MSDN, dass lo bajo Win95/98 Problemas con Laufwerkskapazitäten > 2GB son... In el nächsten Beta-Versión (el Yo wohl morgen hochladen voluntad) voluntad Yo el veces en GetDiskFreeSpaceEx() ajustar...

MfG

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




Sebastian
König
¡Hola Michael,

gerade Yo Versión 1.5.9f hochgeladen (y außerdem a esta Contribución angehängt ). Funktionieren @DiskFree() y @DiskSize() así ahora bajo Windows 98 korrekt?

MfG

Sebastian

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




Michael
Dell
¡Hola Sebastian,

se ejecuta Prima!!! Gracias
 
Salu Michael...

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



Respuesta


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

2.351 Views

Untitledvor 0 min.

Themeninformationen

Dieses Thema ha 2 subscriber:

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


Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie