Consultas, desarrollo de programas y petición de presupuestos:

miércoles, 15 de octubre de 2014

Conocer el nombre y tamaño de las particiones desde Gambas3



Conocer el nombre y tamaño de las particiones desde Gambas3




Este es un ejemplo de uso de comandos externos, dentro de gambas3, y poder extraer información de estos comandos.

En este caso se trata de extraer información de las particiones de nuestro disco duro (o incluso usb conectados). Se trata de leer la salida que genera el comando:

$ cat /proc/partitions 

El texto que se genera, se analiza por el programa, y se extraen arrays de datos (nombre y espacio), de las particiones. Estos datos se muestran tanto en consola como en un formulario con un listbox y un combobox.

Además he añadido un control timer, que cada 5 segundos comprueba si existen cambios en las unidades conectadas, y si los hay nos avisa con un mensaje de que se han producidos conexiones o desconexiones de unidades de disco/usb.

Captura de la aplicación:



Código fuente:
-
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. ' Gambas class file
  2.  
  3. Public contenido As String
  4. Public arrayContenido As String[]
  5. Public lineasDatos As String[]
  6. Public ArrayEspacioParticion As String[]
  7. Public ArrayNombreParticion As String[]
  8.  
  9. Public Sub _new()
  10.  
  11. End
  12.  
  13. Public Sub Form_Open()
  14.   'determinar particiones
  15.  
  16.   DeterminaParticiones()
  17.   'cargo visualmente los datos...
  18.   cargaDatos()
  19.  
  20.   'inicio timer para determinar cambios en el numero de las particiones
  21.   Timer1.Delay = 5000 'cada 5 segundos
  22.   Timer1.Start
  23.  
  24. End
  25.  
  26. Public Sub DeterminaParticiones()
  27.  
  28.   'cargo listado de particiones enla variable "contenido"
  29.  
  30.   Dim a As Integer
  31.   Dim b As Integer
  32.  
  33.   Shell ("cat /proc/partitions") To contenido
  34.  
  35.   'extraigo lineas...
  36.   arrayContenido = Split(contenido, "\n")
  37.  
  38.   'elimino espacios dobles...
  39.   For a = 2 To arrayContenido.max - 1
  40.     'elimino espacios dobles...
  41.     For b = 0 To 5
  42.       arrayContenido[a] = Replace(arrayContenido[a], "  ", " ")
  43.     Next
  44.   Next
  45.  
  46.   'borro lineas que no tienen datos...
  47.   arrayContenido.Delete(0)
  48.   arrayContenido.Delete(0) 'nota: el 1 paso a ser el 0, al borrarse la linea anterior
  49.   arrayContenido.Delete(arrayContenido.max)
  50.  
  51.   'instancio arrays de espacio y nombre
  52.   ArrayEspacioParticion = New String[]
  53.   ArrayNombreParticion = New String[]
  54.  
  55.   'particiono las lineas por el caracter " " (espacio)
  56.   For a = 0 To arrayContenido.Max
  57.     lineasDatos = Split(arrayContenido[a], " ")
  58.     ArrayEspacioParticion.Add(lineasDatos[3])
  59.     ArrayNombreParticion.Add(lineasDatos[4])
  60.   Next
  61.  
  62.   'escribo en conla los datos...
  63.   Print "Lista de particiones y su espacio:"
  64.   For a = 0 To ArrayEspacioParticion.Max
  65.     Print "Nombre: ", ArrayNombreParticion[a], " Espacio: ", ArrayEspacioParticion[a]
  66.    
  67.   Next
  68.  
  69. End
  70.  
  71. Public Sub cargaDatos()
  72.  
  73.   Dim a As Integer
  74.  
  75.   ' ListBox1.Clear() 'limpiio lista
  76.   'ComboBox1.Clear() 'limpiio lista
  77.   For a = 0 To ArrayEspacioParticion.Max
  78.     'en el listbox
  79.     ListBox1.Add(ArrayNombreParticion[a])
  80.     'en el combobox
  81.     ComboBox1.Add(ArrayNombreParticion[a])
  82.   Next
  83.  
  84. End
  85.  
  86. Public Sub ListBox1_Click()
  87.  
  88.   LabelEspacioListbox.text = "Particion: " & ArrayNombreParticion[ListBox1.index] & " Espacio: " & ArrayEspacioParticion[ListBox1.Index]
  89.  
  90. End
  91.  
  92. Public Sub ComboBox1_click()
  93.  
  94.   LabelEspacioCombobox.text = "Particion: " & ArrayNombreParticion[ComboBox1.Index] & " Espacio: " & ArrayEspacioParticion[ComboBox1.Index]
  95.  
  96. End
  97.  
  98. Public Sub Timer1_Timer()
  99.  
  100.   Dim numeroParticiones As Integer
  101.   Dim numeroParticionesNuevo As Integer
  102.  
  103.   numeroParticiones = ArrayNombreParticion.Max
  104.   ListBox1.Clear()
  105.   ComboBox1.Clear()
  106.   cargaDatos()
  107.   DeterminaParticiones()
  108.   numeroParticionesNuevo = ArrayNombreParticion.Max
  109.  
  110.   If numeroParticionesNuevo <> numeroParticiones Then
  111.     Message.Info("Cambio en el numero de particiones")
  112.    
  113.   Endif
  114.  
  115. End
-



Descargar


No hay comentarios:

Publicar un comentario