jueves, 19 de febrero de 2015

C# Generar XML listado archivos



A continuación vamos realizar un programa para generar un XML que contendrá todos los archivos del árbol de directorios de una ruta que especifiquemos. Lo primero vamos a realizar la parte grafica quedando de la siguiente manera la interfaz.


Como se ve la interfaz es bastante simple contaremos de la parte superior donde pondremos la ruta desde donde se comenzara  a leer para generar el XML y la parte inferior tendremos en botón desde donde lanzaremos la acción y también tenemos un check para marcar si deseamos que en el XML también se incluyan los subdirectorios. También vemos que hemos añadido un “folderBrowserDialog “para poder así también seleccionar nuestro directorio.
Vamos comenzar con el botón del evento “click” del botón “Examinar” desde el cual podremos elegir una ruta.


        private void btoExaminar_Click(object sender, EventArgs e)
        {
            folderBrowserDialog1.ShowDialog();
            txtRuta.Text = folderBrowserDialog1.SelectedPath;

        }

Bueno lo único que realizamos aquí es mostrar nuestro “openFileDialog” para mostrar la ventana para elegir nuestro directorio.

Ahora vamos a los realmente importante la función que va generar el XML.

        private void generaXML(string ruta, bool subDir)
        {

            // Inicilizamos en XML
            XmlWriterSettings settings = new XmlWriterSettings();
            settings.Indent = true;
            settings.IndentChars = ("    ");
            writer = XmlWriter.Create("Listado.xml");

            // XML
            System.IO.DirectoryInfo Directorio = new DirectoryInfo(txtRuta.Text);
            writer.WriteStartElement("arbol");
            // Función para recorrer todo el arbol
            RecorreArbol(Directorio, true);
            writer.WriteEndElement();
            writer.Flush();
            writer.Close();
           
            // Mensaje finalizacion
            MessageBox.Show("Completado!");
        }


Y el procedimiento para recorrer el árbol.


        private void RecorreArbol(System.IO.DirectoryInfo directorio, bool subDirectorios)
        {
            System.IO.FileInfo[] files = null;
            System.IO.DirectoryInfo[] subDirs = null;

            // Obtenemos todos los archivos que se encuentra en directorio
            try
            {
                files = directorio.GetFiles("*.*");
            }
            // En caso de error
            catch (Exception e)
            {
                MessageBox.Show("Error: " + e.Message);
            }

            // Si tenemos ficheros los recorremos y los agregamos a nuestro XML
            if (files != null)
            {
               
                foreach (System.IO.FileInfo fi in files)
                {
                    writer.WriteStartElement("archivo");
                    writer.WriteElementString("nombre", fi.Name.ToString());
                    writer.WriteElementString("tamaño", fi.Length.ToString());
                    writer.WriteElementString("utimoAcceso", fi.LastAccessTime.ToString());
                    writer.WriteElementString("fechaCreacion", fi.CreationTime.ToString());
                    writer.WriteEndElement();

                }


                // Solo si lo tenemos activado
                if (subDirectorios)
                {
                    // Buscamos si tiene subdirectorios
                    subDirs = directorio.GetDirectories();

                    foreach (System.IO.DirectoryInfo dirInfo in subDirs)
                    {
                        // LLamada Recursiva
                        RecorreArbol(dirInfo, subDirectorios);
                    }
                }
            }
        }

Aquí tenéis un ejemplo de XML que genera.



Nota: Podéis descargar el proyecto desde aquí




1 comentario: