none
Concatenar Archivos de Texto RRS feed

  • Pregunta

  • Buenos días:

    Tengo el siguiente problema y me gustaría que me pudieran ayudar, actualmente estoy desarrollando una aplicación para el tratamiento de archivos de texto en ASP.NET con C#. El usuario va a depositar un archivo de texto en una carpeta de mi servidor y yo tengo que analizar ese achivo de texto para poder cargarlo en una base de datos. Cada archivo de texto que proceso contiene alrededor de 10000 registros.

    Hasta aquí no hay problema, pero ahora tengo la siguiente complicación. Uno de mis usuarios tiene toda su información separada en diversos archivos (en ocasiones el número de archivos ha llegado hasta 80). estos archivos generalmente no tienen más de 200 registros, pero resulta muy tardado hacer la carga de uno por uno.

    Lo que necesito es desarrollar una herramienta que me permita concatenar estos 80 archivos pequeños en un archivo de texto completo, para así solamente hacer la carga de un archivo. ¿Alguien tiene un idea de como puedo hacer esto?

    Saludos

    Jack

    viernes, 19 de septiembre de 2008 16:46

Respuestas

  • Muchas Gracias Alberto, decidí seguir tu segunda recomendación y me gustaría compartir el código resultante, por si a alguna persona le puede servir:

     

    La única concideración es que todos los archivos deberán estar en un mismo directorio:

    Code Snippet
    //Directorio Contiene la ruta física donde se encuentran todos los archivos
    //Archivo Final es el nombre del archivo (incluyendo la ruta) que tiene la
    //concatenación de todos los archivos
    static void Concatena(string Directorio, string ArchivoFinal)
    {
    //Crea un arreglo con el nombre de todos los archivos existentes
    string[] ArchivosEntrada = Directory.GetFiles(Directorio);
    //Creamos el archivo Final
    FileStream Archivo = new FileStream(ArchivoFinal, FileMode.Create,
    FileAccess.Write, FileShare.None);
    //Para indicar que se va a escribir en el archivo
    StreamWriter writer = new StreamWriter(Archivo);
    foreach (string ArchivoEntrada in ArchivosEntrada)
    {
    //Cargamos el archivo correspondiente
    FileStream ArchivoConcatenar = new FileStream(ArchivoEntrada,
    FileMode.Open, FileAccess.Read);
    //Especificamos que se va a leer el archivo (nota, si no se le pone la
    //instrucción System.Text.Encoding.GetEncoding(1252) los acentos no son leidos)
    StreamReader reader = new StreamReader(ArchivoConcatenar, System.Text.Encoding.GetEncoding(1252));
    string Linea;
    //Recorremos el archivo linea a linea y la vamos escribiendo en el archivo
    //final
    while ((Linea = reader.ReadLine()) != null)
    {
    writer.WriteLine(Linea);
    }
    //Cerramos el archivo y continuamos con el siguiente
    reader.Close();

    }
    //Cerramos el archivo Final
    writer.Close();
    }

     

     


    Espero que les pueda servir de algo, y si tienen alguna otra idea que mejore el rendimiendo de este código pues por favor compartala con todos nosotros.

    Saludos
    Leo.

     

     Alberto Poblacion Escribió:

    Podrías hacerlo directamente desde un "command prompt" tecleando el comando "COPY *.txt total.txt". Esto te copia todos los archivos txt del directorio activo y los deja en "total.txt".

     

    Desde luego que se podría hacer un programa en .Net que hiciera lo mismo, enumerarando los archivos mediante un System.IO.Directory, abriéndolos mediante un StreamReader y enviando todo el contenido al archivo de destino. Pero si no quieres molestarte en hacerlo, puedes lanzar la orden "cmd /c copy *.txt total.txt" mediante Process.Start.

     

     

    lunes, 22 de septiembre de 2008 18:37

Todas las respuestas

  • Podrías hacerlo directamente desde un "command prompt" tecleando el comando "COPY *.txt total.txt". Esto te copia todos los archivos txt del directorio activo y los deja en "total.txt".

     

    Desde luego que se podría hacer un programa en .Net que hiciera lo mismo, enumerarando los archivos mediante un System.IO.Directory, abriéndolos mediante un StreamReader y enviando todo el contenido al archivo de destino. Pero si no quieres molestarte en hacerlo, puedes lanzar la orden "cmd /c copy *.txt total.txt" mediante Process.Start.

     

     

    lunes, 22 de septiembre de 2008 16:28
  • Muchas Gracias Alberto, decidí seguir tu segunda recomendación y me gustaría compartir el código resultante, por si a alguna persona le puede servir:

     

    La única concideración es que todos los archivos deberán estar en un mismo directorio:

    Code Snippet
    //Directorio Contiene la ruta física donde se encuentran todos los archivos
    //Archivo Final es el nombre del archivo (incluyendo la ruta) que tiene la
    //concatenación de todos los archivos
    static void Concatena(string Directorio, string ArchivoFinal)
    {
    //Crea un arreglo con el nombre de todos los archivos existentes
    string[] ArchivosEntrada = Directory.GetFiles(Directorio);
    //Creamos el archivo Final
    FileStream Archivo = new FileStream(ArchivoFinal, FileMode.Create,
    FileAccess.Write, FileShare.None);
    //Para indicar que se va a escribir en el archivo
    StreamWriter writer = new StreamWriter(Archivo);
    foreach (string ArchivoEntrada in ArchivosEntrada)
    {
    //Cargamos el archivo correspondiente
    FileStream ArchivoConcatenar = new FileStream(ArchivoEntrada,
    FileMode.Open, FileAccess.Read);
    //Especificamos que se va a leer el archivo (nota, si no se le pone la
    //instrucción System.Text.Encoding.GetEncoding(1252) los acentos no son leidos)
    StreamReader reader = new StreamReader(ArchivoConcatenar, System.Text.Encoding.GetEncoding(1252));
    string Linea;
    //Recorremos el archivo linea a linea y la vamos escribiendo en el archivo
    //final
    while ((Linea = reader.ReadLine()) != null)
    {
    writer.WriteLine(Linea);
    }
    //Cerramos el archivo y continuamos con el siguiente
    reader.Close();

    }
    //Cerramos el archivo Final
    writer.Close();
    }

     

     


    Espero que les pueda servir de algo, y si tienen alguna otra idea que mejore el rendimiendo de este código pues por favor compartala con todos nosotros.

    Saludos
    Leo.

     

     Alberto Poblacion Escribió:

    Podrías hacerlo directamente desde un "command prompt" tecleando el comando "COPY *.txt total.txt". Esto te copia todos los archivos txt del directorio activo y los deja en "total.txt".

     

    Desde luego que se podría hacer un programa en .Net que hiciera lo mismo, enumerarando los archivos mediante un System.IO.Directory, abriéndolos mediante un StreamReader y enviando todo el contenido al archivo de destino. Pero si no quieres molestarte en hacerlo, puedes lanzar la orden "cmd /c copy *.txt total.txt" mediante Process.Start.

     

     

    lunes, 22 de septiembre de 2008 18:37