/// <summary> /// Cada vez que se hace "doble click" sobre un elemento se calcula el tamaño del directorio /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void lstLista_ItemActivate(object sender, EventArgs e) { // Definición de variables ListView lista = (ListView)sender; //nFiles += dirLista[lstLista.Items.IndexOfKey("Xtras (archivos)")].Archivos; DirInfo dirInfo = (listaDirHistoria[indexHistory])[lista.SelectedItems[0].Index]; //DirInfo dirInfo = dirLista[lista.SelectedItems[0].Index]; // Llamar a la rutina para calcular los datos del directorio CalcularDirectorio(dirInfo.Ruta); // Finalizar return; }
/// <summary> /// Cada vez que se hace "doble click" sobre un elemento se calcula el tamaño del directorio /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void lstLista_ItemActivate(object sender, EventArgs e) { // Definición de variables ListView lista = (ListView)sender; String strNombre = lista.SelectedItems[0].SubItems[0].Text; Int32 nSelection; Int32 nBusqueda = -1; // Si se ha hecho doble click sobre los archivos del directorio if (strNombre == strArchivosSueltos) { return; } nSelection = Convert.ToInt32(lista.SelectedItems[0].Name); // devuelve el índice del elemento seleccionado DirInfo dirInfo = (listaDirHistoria[indexActual])[nSelection]; // devuelve el objeto DirInfo del elemento seleccionado // Comprobar si el elemento seleccionado ya está calculado nBusqueda = lbxHistory.Items.IndexOf(dirInfo.Ruta); // Devuelve -1 cuando no se encuentra nada if (nBusqueda > -1) { lbxHistory.SelectedIndex = nBusqueda; } else { // Llamar a la rutina para calcular los datos del directorio //CalcularDirectorio(dirInfo.Ruta); // Iniciar un hilo para calcular el tamaño del directorio // Pasar las variables iniciales al hilo hilo.SetDirRuta(dirInfo.Ruta); // Iniciar el hilo thread = new Thread(new ThreadStart(hilo.HiloProc)); thread.Start(); // Cambiar el texto de la barra de estado de la aplicación HiloOcultarUI(); this.statuslblInfo.Text = String.Concat("Calculando tamaño de '", dirInfo.Ruta, "' (presione ESC para cancelar)..."); } // Finalizar return; }
/// <summary> /// Itera a través del directorio especificado para obtener información /// del tamaño que ocupa /// </summary> /// <param name="dir">Directorio que se quiere analizar</param> private List <DirInfo> ExplorarDirectorio(DirectoryInfo dir) { // Definición de variables DirectoryInfo[] directories; DirInfo dirData = new DirInfo(); List <DirInfo> dirLista = new List <DirInfo>(); long lTamañoTotal = 0; int nCarpetas = 0; int nArchivos = 0; // Iterar para cada uno de los subdirectorios directories = dir.GetDirectories(); foreach (DirectoryInfo d in directories) { // Si se trata de un directorio real if ((d.Attributes & FileAttributes.Directory) != 0) { // Recuperar la información de los subdirectorios nCarpetas = 0; nArchivos = 0; dirData.Nombre = d.Name; dirData.Ruta = d.FullName; dirData.bytes = DirSize(d, ref nCarpetas, ref nArchivos); dirData.kilo = SizeConversion(dirData.bytes, ConversionOptions.BytesToKilo); dirData.mega = SizeConversion(dirData.bytes, ConversionOptions.BytesToMega); dirData.giga = SizeConversion(dirData.bytes, ConversionOptions.BytesToGiga); dirData.Carpetas = nCarpetas; dirData.Archivos = nArchivos; // Añadir a la lista dirLista.Add(dirData); // Calcular el tamaño total del directorio lTamañoTotal += dirData.bytes; } } // Obtener la información para los archivos del directorio seleccionado nCarpetas = 0; nArchivos = 0; dirData.Nombre = strArchivosSueltos; // Constante definida como miembro de la clase dirData.Ruta = String.Format("{0}\\{1}", dir.FullName, strArchivosSueltos); dirData.bytes = FileSize(dir, ref nArchivos); dirData.kilo = SizeConversion(dirData.bytes, ConversionOptions.BytesToKilo); dirData.mega = SizeConversion(dirData.bytes, ConversionOptions.BytesToMega); dirData.giga = SizeConversion(dirData.bytes, ConversionOptions.BytesToGiga); dirData.Carpetas = nCarpetas; dirData.Archivos = nArchivos; dirLista.Add(dirData); lTamañoTotal += dirData.bytes; // Ahora se puede calcular el porcentaje que ocupa cada directorio for (int i = 0; i < dirLista.Count; i++) { dirData = dirLista[i]; if (dirData.bytes == 0) { dirData.porcentaje = 0; } else { dirData.porcentaje = 100f * dirData.bytes / ((Double)lTamañoTotal); } dirLista[i] = dirData; } // Devolver el resultado return(dirLista); }