elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  ayuda con logica para el GetDiskFreeSpaceEx
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: ayuda con logica para el GetDiskFreeSpaceEx  (Leído 6,551 veces)
_CrisiS_

Desconectado Desconectado

Mensajes: 286


Ver Perfil
ayuda con logica para el GetDiskFreeSpaceEx
« en: 8 Septiembre 2010, 04:55 am »


Hola amigos estoy usando la APi GetDiskFreeSpaceEx para calcular los espacios de los discos.
Bueno cuando recibo el tamaño de bytes de un label, comparando fisicamente con la particiion (ejm D:) es la misma , ahora mi problema creo q es en la logica, o en los tipo de dato q aplico para convertir esos datos En GB. (redondeados a 2 decimales), acontinuacion pondre el codigo (resumido de lo que uso)

Código:
'Api
Private Declare Function GetDiskFreeSpaceEx Lib "Kernel32" Alias "GetDiskFreeSpaceExA" (ByVal RootPathName As String, ByRef lpFreeBaytesAvailableToCaller As [b]Long,[/b] ByRef lpTotalNumberofBytes As [b]Long[/b], ByRef lpTotalNumberofFreeBytes As [b]Long[/b]) As Integer


Private Sub MostrarDatos()
        Dim Disco As String
        Dim Capacidad As Single
        Dim Libre As Long
        Dim PorcentajeUsado As Long
        Dim PorcentajeLibre As Long
        Dim retorno As Integer
...
retorno = GetDiskFreeSpaceEx(Disco, Libre, Capacidad, Libre)
        Capacidad = Capacidad / 10000
        Libre = Libre / 10000
        'MessageBox.Show(Libre)
        Capacidad = Capacidad * 10000 / 1000000
        Libre = Libre * 10000 / 1000000


        Label1.Text = String.Format(Capacidad, "0. 00") & "Megabytes"
        GB1_label.Text = Math.Round(Capacidad / 1024, 2) & " GB"

        Label2.Text = String.Format(Capacidad - Libre, "0.00") & " MegaBytes Usados"
        GB2_label.Text = Math.Round(Capacidad - Libre, 2)
        Label3.Text = String.Format(Libre, "0.00") & " MegaBytes Libres"

        PorcentajeLibre = Libre * 100 / Capacidad
        Label4.Text = String.Format(PorcentajeLibre, "0.00") & " % de Bytes Libres"

        PorcentajeUsado = (Capacidad - Libre) * 100 / Capacidad
        Label5.Text = String.Format(PorcentajeUsado, "0.00") & " % de Bytes Utilizados"

Bueno el problema que tengo es que las equivalencias que me salen son las "reales", como pueden apreciar en la siguiente imagen:


En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: ayuda con logica para el GetDiskFreeSpaceEx
« Respuesta #1 en: 8 Septiembre 2010, 07:49 am »

Edito:

Solo por aclarar en currency al obtener los valores salen con coma decimal por ello hay que multiplicar por 10000 para eliminarla, aun que puede trabajarse aun con ella...

Edicion 2

en tu codigo falta dividir una vez mas entre 1024 para obtener los Gigas!¡, en espacio utilizado como en espacio libre

Código
  1.  
  2. Option Explicit
  3.  
  4. Private Declare Function GetDiskFreeSpaceEx Lib "kernel32" Alias "GetDiskFreeSpaceExA" _
  5.        (ByVal lpRootPathName As String, _
  6.         lpFreeBytesAvailableToCaller As Currency, _
  7.         lpTotalNumberOfBytes As Currency, _
  8.         lpTotalNumberOfFreeBytes As Currency) As Long
  9.  
  10. Private Sub Form_Load()
  11.    Dim r As Long, BytesFreeToCalller As Currency, TotalBytes As Currency
  12.    Dim TotalFreeBytes As Currency, TotalBytesUsed As Currency
  13.    Const RootPathName$ = "c:\"
  14.    Call GetDiskFreeSpaceEx(RootPathName, BytesFreeToCalller, TotalBytes, TotalFreeBytes)
  15.    Me.AutoRedraw = True
  16.    Me.Cls
  17.    Me.Print "    Datos del Disco " & RootPathName
  18.    Me.Print "Capasidad Total:"
  19.    Me.Print ShowPrintForm(GetExpBytes(TotalBytes * 10000, 2))
  20.    Me.Print
  21.    Me.Print "Espacio Libre en " & RootPathName
  22.    Me.Print ShowPrintForm(GetExpBytes(TotalFreeBytes * 10000, 2))
  23.    Me.Print
  24.    Me.Print "Bytes Disponibles en " & RootPathName
  25.    Me.Print ShowPrintForm(GetExpBytes(BytesFreeToCalller * 10000, 2))
  26.    Me.Print
  27.    Me.Print "Espacio Utilizado en " & RootPathName
  28.    Me.Print ShowPrintForm(GetExpBytes((TotalBytes - TotalFreeBytes) * 10000, 2))
  29. End Sub
  30.  
  31. Private Function GetExpBytes(ByVal vVal As Currency, Optional Redondear As Long = -1) As Currency()
  32. Dim TmpArr()    As Currency
  33. Dim PtrArr&
  34.    ReDim TmpArr(PtrArr&)
  35.    TmpArr(PtrArr&) = vVal
  36.    Do Until Val(TmpArr(PtrArr&) - 100) < 0
  37.        PtrArr& = PtrArr& + 1
  38.        ReDim Preserve TmpArr(PtrArr&)
  39.        If Redondear < 0 Then
  40.            TmpArr(PtrArr&) = TmpArr(PtrArr& - 1) / 1024
  41.        Else
  42.            TmpArr(PtrArr&) = Round(TmpArr(PtrArr& - 1) / 1024, Redondear)
  43.        End If
  44.    Loop
  45.    GetExpBytes = TmpArr()
  46. End Function
  47.  
  48. Private Function ShowPrintForm(ByRef RefCol() As Currency, Optional StrAbrev$ = "KMGT", Optional Sep$ = vbCrLf) As String
  49. If (Not RefCol) = -1 Then Exit Function
  50. Dim vByte(3) As Byte '  //  Index:QueCosa? --> 0:LBound();  1:Len();  2:Ubound():  3:IndexFor
  51.    vByte(0) = LBound(RefCol) + 0
  52.    ShowPrintForm = RefCol(vByte(0)) & " Bytes"
  53.    vByte(1) = Len(StrAbrev$) + 0
  54.    vByte(2) = UBound(RefCol) + 0
  55.    If vByte(2) > vByte(1) Then vByte(2) = vByte(1)
  56.    For vByte(3) = vByte(0) + 1 To vByte(2)
  57.        ShowPrintForm = ShowPrintForm & Sep$ & RefCol(vByte(3)) & " " & Mid$(StrAbrev$, vByte(3), 1) & "Bytes"
  58.    Next
  59. End Function
  60.  
  61.  

Dulce Infierno Lunar!¡.


« Última modificación: 8 Septiembre 2010, 17:33 pm por BlackZeroX » En línea

The Dark Shadow is my passion.
_CrisiS_

Desconectado Desconectado

Mensajes: 286


Ver Perfil
Re: ayuda con logica para el GetDiskFreeSpaceEx
« Respuesta #2 en: 9 Septiembre 2010, 04:29 am »

vaya ese code es en vb6 nop?  yo lo nesesito para vb net, aunque si me sirvio para ciertos puntos.

O si desean les subo mi proy para que no tengan q crearlo desde 0
En línea

_katze_

Desconectado Desconectado

Mensajes: 140



Ver Perfil WWW
Re: ayuda con logica para el GetDiskFreeSpaceEx
« Respuesta #3 en: 9 Septiembre 2010, 05:02 am »

_Crisis_ te estaria agradecido porq no puedo todavia usar apis ni nada por el estilo que tenga  que ver con vb6 en vb.net !
En línea

_CrisiS_

Desconectado Desconectado

Mensajes: 286


Ver Perfil
Re: ayuda con logica para el GetDiskFreeSpaceEx
« Respuesta #4 en: 9 Septiembre 2010, 05:51 am »

Bueno ay te lo dejo:
Código:
http://www.4shared.com/file/kCNX-1bA/HDmedidor2.html
espero que puedas solucionar el problema logico q tiene mi proy. X)

P.D > No piratearlo please XD!!!!
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: ayuda con logica para el GetDiskFreeSpaceEx
« Respuesta #5 en: 9 Septiembre 2010, 06:49 am »

.
El codigo que te he dejado usa esactamente lo mismo que el tuyo, la API GetDiskFreeSpaceEx, asi que no te van a hacer ningun trabajo!¡.

P.D.: Esta sección es vb6 NO .NET asi que no creo que alguien te lo vaya a hacer ( almenos yo no lo hare, con el ejemplo que te deje arriba es suficiente al respecto de la API Dada, ademas no tengo instalado VS NET )

Edito:

Acabo de ver tu Source con el block de notas y estas programando como si fuese vb6, yo no usaria On Error Resume Next en .NEt  usaria el Try Catch, entre otras cosas propias de .NET

Dulces Lunas!¡.
« Última modificación: 9 Septiembre 2010, 06:54 am por BlackZeroX » En línea

The Dark Shadow is my passion.
_CrisiS_

Desconectado Desconectado

Mensajes: 286


Ver Perfil
Re: ayuda con logica para el GetDiskFreeSpaceEx
« Respuesta #6 en: 9 Septiembre 2010, 06:55 am »

a chispas no me abia percatado que NET estaba en un subforo, jejej grave problema mio sorry X_X, Pero bueno respondiendote tu ejemplo va bien en vb6 pero al migrarlo a net da varios errores los cuales no llego a corregir todos, y me estanco alli X)
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: ayuda con logica para el GetDiskFreeSpaceEx
« Respuesta #7 en: 9 Septiembre 2010, 07:03 am »

.
indica los errores y te dire que onda!¡.

Posiblemente sean los Me.Print  susutituyelos por Debug.print (PAra mostrarlos en la venta Inmediato del IDE de .NET), seguramente sea eso!¡.

y si no es el unico marca cuales son!¡.

Dulces Lunas!¡.
En línea

The Dark Shadow is my passion.
_katze_

Desconectado Desconectado

Mensajes: 140



Ver Perfil WWW
Re: ayuda con logica para el GetDiskFreeSpaceEx
« Respuesta #8 en: 9 Septiembre 2010, 18:10 pm »

se callo el link man !
En línea

_CrisiS_

Desconectado Desconectado

Mensajes: 286


Ver Perfil
Re: ayuda con logica para el GetDiskFreeSpaceEx
« Respuesta #9 en: 11 Septiembre 2010, 16:56 pm »

Disculpen por la demora =P

aver katze aca ay otro link : http://www.4shared.com/file/p6KK0eTh/HDmedidor2.html

BlackZero:
mmm aver en:
AutoRedraw    // no e sun mienbro del proyecto
lo mismo con cls
GetExpBytes = TmpArr()  //el numero de indices es inferior al numero de dimensiones de la matriz indizada
Not RefCol // el operador 'Not' no esta definido para el tipo '1-matriz.dimecional de Decimal'.
son por el momento los errores q me dan tu code XP
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Alguien me ayuda con un tema de logica
Programación Visual Basic
CAR3S? 5 2,015 Último mensaje 13 Febrero 2011, 19:40 pm
por CAR3S?
ayuda logica, scanner php
PHP
PanConMantequilla 3 2,459 Último mensaje 1 Julio 2011, 21:20 pm
por дٳŦ٭
Ayuda lógica para crear una tool SQLi
Nivel Web
PanConMantequilla 5 4,952 Último mensaje 3 Febrero 2012, 20:22 pm
por PanConMantequilla
ayuda con ejercicio de logica
Programación C/C++
ChristianThraash 4 2,621 Último mensaje 11 Julio 2016, 02:42 am
por + 1 Oculto(s)
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines