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í
GRACIAS! Me sirvio mucho
ResponderEliminar