Si has tenido que mostrar alguna vez las entradas de un directorio y has tenido que filtrarlas de alguna forma (para ver, por ejemplo, todos los archivos de texto, los archivos XML, las imágenes …) posiblemente lo hayas resuelto abriendo el directorio, leyendo una a una cada entrada, comparándola con lo que buscabas y, después de hacer lo que necesitas, cerrando el directorio.
Pues has hecho mal. Existe una forma mucho más rápida de hacerlo. En PHP desde la versión 4.3 se hace uso de una función también disponible en la biblioteca estándar de C llamada glob().
En PHP su uso es, como suele suceder con todas las demás, mucho más fácil que en C. Pero qué mejor que un ejemplo:
<?php foreach (glob("*.txt") as $nombre_archivo) { echo $nombre_archivo ' con tamaño ', filesize($nombre_archivo), " bytes\n"; } ?>
Esto mostrará una salida como esta:
archivo1.txt con tamaño 44686 bytes archivo2.txt con tamaño267625 bytes archivo3.txt con tamaño137820 bytes
String columnas[] = new String[2]; columnas[0] = id; columnas[1] = etiqueta; combo.addItem (columnas);Con esto nos guardará la información que necesitemos. Y con este otro nos mostrará tan solo lo que nosotros querramos.
combo.setRenderer (new DefaultListCellRenderer() { public java.awt.Component getListCellRendererComponent ( JList l,Object o,int i,boolean s, boolean f) { return new JLabel (((String[])o)[1]); } });
valor_logico = ((int)clave.GetValue (nombreCadena)) == 1;Para leer los datos del registro. Suponiendo que clave es un RegistryKey ya abierto. Y:
clave.SetValue (nombreCadena, valor_logico ? 1 : 0, RegistryValueKind.DWord);para escribirlo.
public class GestionVentana { Progreso progreso; InvConf.Configuracion conf; public GestionVentana (ref InvConf.Configuracion conf, ref Progreso progreso) { this.conf = conf; this.progreso = progreso; } public void bw_RunWorkerCompleted (object sender, System.ComponentModel.RunWorkerCompletedEventArgs e) { this.progreso.Hide (); } public void bw_DoWork (object sender, System.ComponentModel.DoWorkEventArgs e) { // Esta es la función que tarda varios minutos this.conf.procesarEquipo (); } }Y después en el método principal debemos insertar algo como esto:
System.ComponentModel.BackgroundWorker bw = new System.ComponentModel.BackgroundWorker (); GestionVentana gv = new GestionVentana (ref conf, ref progreso); bw.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler (gv.bw_RunWorkerCompleted); bw.DoWork += new System.ComponentModel.DoWorkEventHandler (gv.bw_DoWork); bw.RunWorkerAsync (); while (bw.IsBusy) { // O cualquier otra actualización en la interfaz que queramos realizar. Application.DoEvents (); }
[System.Runtime.InteropServices.DllImport ("shdocvw.dll")] private static extern int DllGetVersion (ref DLLVERSIONINFO pdvi);2º Definir la estructura que almacenará la información de la versión
struct DLLVERSIONINFO { public uint cbSize, dwMajorVersion, dwMinorVersion, dwBuildNumber, dwPlatformID; }3º Llamar a la función y obtener la información.
DLLVERSIONINFO dvi = new DLLVERSIONINFO (); dvi.cbSize = (uint)System.Runtime.InteropServices.Marshal.SizeOf (dvi); int resultado = DllGetVersion (ref dvi); if (resultado == 0) return string.Format ("{0}.{1}.{2}", dvi.dwMajorVersion, dvi.dwMinorVersion, dvi.dwBuildNumber); else return "?";